Linux中的Java文件路径

AJW*_*AJW 10 java

我有一个相当愚蠢的问题,但我无法找到解决方案:

当我尝试读取文件时,我得到"文件未找到错误"是运行时.它虽然编译了文件.

我在Linux上,所以我使用的语句如下:

Scanner s = new Scanner(new File("home/me/java/ex.txt"));
Run Code Online (Sandbox Code Playgroud)

它给了我一个运行时错误:

/home/me/javaException in thread "main" java.io.FileNotFoundException: home/me/java/ex.txt (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:137)
at java.util.Scanner.<init>(Scanner.java:653)
at test.main(test.java:14)
Run Code Online (Sandbox Code Playgroud)

我尝试按照文件名的方式更改所有可能的内容,但似乎没有任何效果.

关于为什么会发生这种情况的任何线索?默认情况下java在哪里查找文件?

Tod*_*ner 17

看起来你错过了一个领先的斜杠.也许试试:

Scanner s = new Scanner(new File("/home/me/java/ex.txt"));
Run Code Online (Sandbox Code Playgroud)

(至于默认情况下它查找文件的位置,它是从相对路径运行JVM的位置,就像您在问题中所拥有的那样)


Bil*_*ill 13

我认为Todd是正确的,但我认为还有另外一件事你应该考虑.您可以在运行时从JVM可靠地获取主目录,然后您可以创建相对于该位置的文件对象.它并没有那么多麻烦,如果您转移到另一台计算机或操作系统,这将是您会欣赏的.

File homedir = new File(System.getProperty("user.home"));
File fileToRead = new File(homedir, "java/ex.txt");
Run Code Online (Sandbox Code Playgroud)

  • 如果移植到*any*其他操作系统,我建议在`System.getProperty("file.separator")`的路径中交换`"/"`或者使用该构造函数交替构造部分路径.否则,+1 (3认同)
  • 如果您的目标是unix,linux,OS X或Windows,则正斜杠将起作用.是的,甚至是Windows. (3认同)