无法从bin读取输入文件

时间:2013-04-03 14:41:56

标签: java file properties filenotfoundexception

Errr伙计们,我写了一些代码来用Java读取一个简单的输入文件,一切都运行得很好,但是在代码签入后,当其他人试图运行它时,他们的二进制文件找不到文件(尽管如此)文件在他们的bin文件夹中是正确的!)

java.io.FileNotFoundException: C:\blah\bin\com\common\PackageRFCs.properties (The system cannot find the path specified)

所以在我的工作区中,我有这些结构和文件:

com.test.test.java
com.common.Utility.java
com.common.PackageRFCs.properties

在我的 test.java 中,我试图以这种方式阅读属性文件:

Class<com.common.Utility> dummy = com.common.Utility.class;
String propURI = dummy.getPackage().getName().replace('.','/') + "/PackageRFCs.properties";
String filepath = ClassLoader.getSystemClassLoader().getResource(propURI).getFile();
...
BufferedReader br = new BufferedReader(new FileReader(filepath));
// do some read line stuff here

上面的代码在我的Eclipse下工作得非常好,但是当其他人尝试运行它时失败了。我想也许我的箱子里有一些悬挂的文件,所以我做了一个项目&gt;干净,我仍然可以完美地运行它...我也尝试清理其他用户的工作区,他们仍然无法读取文件... WTF正在进行?

我无法重现这个问题。

1 个答案:

答案 0 :(得分:1)

如果您有来自getResource()的网址,则无需将其转换为文件路径,并使用FileReader打开该网址(由于{{1}无法解决此问题不是本机文件路径,它只是原始URL的子字符串)。只需使用URL.getFile()或首先致电.openStream()

get{System}ResourceAsStream()

(我假设ISO-8859-1编码,因为该文件名为BufferedReader br = new BufferedReader(new InputStreamReader( ClassLoader.getSystemResourceAsStream(propURI), "ISO-8859-1")); ,这是Java属性文件的标准编码,但如果这是错误的,则更改编码以匹配文件)< / p>

但考虑到你已经拼出的结构,使用

会更加健壮
.properties

自动处理程序包到路径的映射,并且能够处理由系统类加载器以外的类加载器加载类的情况。