我将 java 属性 user.dir 设置为/home/alex/projects/poltava/rpgu/workingdir。我也有文件q.txt在上面的文件夹中
以下是代码片段及其返回值(在 = 之后):
System.getProperty("user.dir") = /home/alex/projects/poltava/rpgu/workingdir
new File(".").getAbsolutePath() = /home/alex/projects/poltava/rpgu/workingdir/.
new File(".").exists() = true
new File("q.txt").getAbsolutePath() = /home/alex/projects/poltava/rpgu/workingdir/q.txt
new File("q.txt").exists() = false
new File(new File("q.txt").getAbsolutePath()).exists() = true
new FileInputStream("q.txt") = threw FileNotFoundException
这样您就可以看到文件确实存在于文件系统中。当我尝试使用绝对路径获取它时,一切都很好。当我尝试使用相对路径获取它时,它失败了。
我对相对路径有什么问题?
编辑:
演示问题的小应用程序:
import java.io.File;
public class Test {
public static void main(String[] args) {
System.setProperty("user.dir", "/home/alex/projects/poltava/rpgu/workingdir");
System.out.println(System.getProperty("user.dir"));
System.out.println(new File("q.txt").exists());
System.out.println(new File("q.txt").isFile());
System.out.println(new File("q.txt").canRead());
System.out.println(new File("q.txt").getAbsolutePath());
System.out.println(new File(new File("q.txt").getAbsolutePath()).exists());
System.out.println(new File(new File("q.txt").getAbsolutePath()).isFile());
System.out.println(new File(new File("q.txt").getAbsolutePath()).canRead());
try {
new FileInputStream("q.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
输出:
/home/alex/projects/poltava/rpgu/workingdir
false
false
false
/home/alex/projects/poltava/rpgu/workingdir/q.txt
true
true
true
java.io.FileNotFoundException: q.txt (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at java.io.FileInputStream.<init>(FileInputStream.java:101)
at Test.main(Test.java:24)
编辑2:
我还尝试了另一个简单的例子:
File f = new File("q1.txt");
System.out.println(f.createNewFile());
System.out.println(f.getPath());
System.out.println(f.getAbsolutePath());
输出:
true
q1.txt
/home/alex/projects/poltava/rpgu/workingdir/q1.txt
结果文件是在我启动应用程序的目录中创建的。不在user.dir
目录中。并getAbsolutePath()
返回不正确的文件路径。