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正在进行?
我无法重现这个问题。
答案 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
自动处理程序包到路径的映射,并且能够处理由系统类加载器以外的类加载器加载类的情况。