FileInputStream 不适用于相对路径[关闭]

Posted

技术标签:

【中文标题】FileInputStream 不适用于相对路径[关闭]【英文标题】:FileInputStream doesn't work with the relative path [closed] 【发布时间】: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 的。 【参考方案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】:
    这不是相对路径,而是绝对路径。 如果您使用的是 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文件的绝对路径吗:) 检查我的编辑,然后让我知道它是否有效

以上是关于FileInputStream 不适用于相对路径[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

字体的相对路径不适用于 sass-loader

php require() 不适用于相对或完整

SQLite的相对路径不适用于WIX工具集

PHP:要求路径不适用于 cron 作业?

37使用FileInputStream和FileOutputStream读取和写入

FileInputStream FileoutputStream IO