27

我试图创建一个对象FileInputStream并将文件的相对值传递给它的构造函数,但它不能正常工作并抛出一个FileNotFoundException

try {
   InputStream is = new FileInputStream("/files/somefile.txt");
} catch (FileNotFoundException ex) {
   System.out.println("File not found !");
}
4

3 回答 3

58

/开头将使路径成为绝对路径而不是相对路径。

尝试删除前导/,所以替换:

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

和:

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

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

System.out.println(System.getProperty("user.dir"));
于 2013-01-27T23:01:52.450 回答
7

其他海报是正确的,您给出的路径不是相对路径。你可能会做类似的事情this.getClass().getResourceAsStream("Path relative to the current class")。这将允许您基于相对于您调用它的类的路径将文件作为流加载。

有关更多详细信息,请参阅 Java API:http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResourceAsStream(java.lang.String)

于 2013-01-27T23:03:47.953 回答
4
  1. 这不是相对路径,而是绝对路径。
  2. 如果您使用的是 Windows,则需要在路径前添加驱动器号:

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

windows 不支持/符号为“root”

如果要加载将放入 JAR 的文件,则需要使用

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

或者

getClass().getResourceAsStream("path to your file");
于 2013-01-27T22:57:55.743 回答