我使用Java 6,并且有一种方法可以扫描运行时类路径中名为的文件config.xml
。如果找到,我想将文件的内容读取为字符串:
InputStream istream = this.getClass().getClassLoader().getResourceAsStream("config.xml");
if(istream != null) {
System.out.println("Found config.xml!");
StringBuffer fileData = new StringBuffer(1000);
BufferedReader reader;
try {
reader = new BufferedReader(new FileReader(fileName));
char[] buf = new char[1024];
int numRead = 0;
while((numRead=reader.read(buf)) != -1) {
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
reader.close();
}
} catch (FileNotFoundException fnfExc) {
throw new RuntimeException("FileNotFoundException: " + fnfExc.getMessage());
} catch (IOException ioExc) {
throw new RuntimeException("IOException: " + ioExc.getMessage());
}
}
运行此代码时,将获得以下控制台输出:
Found config.xml!
Exception in thread "main" java.lang.RuntimeException: FileNotFoundException: config.xml (No such file or directory)
at com.me.myapp.Configurator.readConfigFileFromClasspath(Configurator.java:556)
at com.me.myapp.Configurator.<init>(Configurator.java:34)
...rest of stack trace omitted for brevity
因此,config.xml
成功进行类路径扫描,但随后读者似乎无法找到该文件。为什么???我唯一的理论是,当config.xml
在类路径上找到它时,它不包含文件在文件系统上的位置的绝对路径,也许这就是读者代码正在寻找的东西。
从您给出的示例,尚不清楚所指的fileName
是什么。您应该只使用从中获得的流getResourceAsStream()
来读取文件,
reader = new BufferedReader(new InputStreamReader(istream));
并且您应该避免buf
一次就足够为每个读取周期重复分配new。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句