FileInputStream不能使用相对路径工作

29
我尝试使用FileInputStream创建一个对象,并将文件的相对路径传递给它的构造函数,但它不能正常工作并抛出了一个FileNotFoundException异常。
try {
   InputStream is = new FileInputStream("/files/somefile.txt");
} catch (FileNotFoundException ex) {
   System.out.println("File not found !");
}

2
"/files"不是一个相对路径。您是否指的是"./files"? - John3136
2
那不是一个相对路径。这是一个绝对路径。 - JB Nizet
无论是"./files/"还是"files/"都可以作为相对路径。 - djangofan
3个回答

61

在开头的/将使路径变为绝对路径,而不是相对路径。

尝试删除前面的/,将其替换为:

InputStream is = new FileInputStream("/files/somefile.txt");
`with:`
InputStream is = new FileInputStream("files/somefile.txt");

如果您仍然遇到问题,可以通过检查当前目录确保程序正在您认为的位置运行:

System.out.println(System.getProperty("user.dir"));

我发现了相同的错误,但只有俄语文件名,我该怎么办?我的文件路径是/storage/emulated/0/fourth_ррссттууффххцц.txt,请帮忙。 - Bhanu Sharma
2
不行,如果文件与InputStream实例代码在同一个目录中,则无法工作。 - IgorGanapolsky

7

4
  1. 这不是相对路径,而是绝对路径。
  2. 如果您使用的是Windows系统,在路径前需要添加驱动器号:

InputStream is = new FileInputStream("C:/files/somefile.txt");

Windows不支持使用/符号作为“根目录”。

如果您想加载放在JAR文件中的文件,则需要使用:

getClass().getResource("path to your file");

或者

getClass().getResourceAsStream("path to your file");

1
files是项目src文件夹中的一个包,我想将这个文件夹或包作为最终的.jar文件的一部分。 - Mahmoud Elshamy
好的,但是你的路径不是相对路径,所以你需要使用相对路径或者指定文件的绝对路径。 - BackSlash
好的,你能给我一个获取最终 .jar 文件绝对路径的代码吗? :) - Mahmoud Elshamy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接