【问题标题】:FileInputStream doesn't work with the relative path [closed]FileInputStream 不适用于相对路径[关闭]
【发布时间】:2013-01-11 06:36:37
【问题描述】:

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

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

【问题讨论】:

  • /files 不是相对路径。你是说 ./files 吗?
  • 这不是相对路径。这是一条绝对路径。
  • “./files/”或“files/”都应该作为相对路径。
  • 它工作正常,但找不到文件。那是因为它不是你说的地方。是你的错,不是 FileInputStream 的。

标签: java filenotfoundexception fileinputstream


【解决方案1】:

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

尝试删除前导/,因此替换:

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

与:

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

如果您仍然遇到问题,请尝试通过checking the current directory 确保程序从您认为的位置运行:

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

【讨论】:

  • 我发现了同样的错误,但俄罗斯文件名只是我应该做的。我的文件路径 /storage/emulated/0/fourth_ррсттууффххцц.txt 请帮助
  • 不,如果文件与 InputStream 实例代码位于同一目录中,则不起作用。
【解决方案2】:

其他海报是正确的,您给出的路径不是相对路径。您可能会做类似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)

【讨论】:

    【解决方案3】:
    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");
    

    【讨论】:

    • files是项目src文件夹中的一个包,我想把这个文件夹或包作为最终.jar文件的一部分
    • 好的,但是你的路径不是相对的,所以你需要使用相对路径或者为你的文件指定绝对路径
    • 好的,你能给我一个代码来获取最终的.jar文件的绝对路径吗:)
    • 检查我的编辑,然后让我知道它是否有效
    猜你喜欢
    • 2012-08-29
    • 2011-07-12
    • 1970-01-01
    • 2015-05-14
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    相关资源
    最近更新 更多