我已经在Google上搜索了相当长的时间,但所有的结果都指向Java 7之前的NIO解决方案。我已经使用NIO stuff从文件系统上的特定位置读取文件,这比以前容易得多(Files.readAllBytes(path)
)。现在,我想读取一个打包在WAR中并位于类路径上的文件。我们目前使用类似以下代码的方式实现:
Input inputStream = this.getClass().getClassLoader().getResourceAsStream(fileName);
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
/* iterate through the input stream to get all the bytes (no way to reliably find the size of the
* file behind the inputStream (see http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#available()))
*/
int byteInt = -1;
try
{
byteInt = inputStream.read();
while (byteInt != -1)
{
byteStream.write(byteInt);
byteInt = inputStream.read();
}
byteArray = byteStream.toByteArray();
inputStream.close();
return byteArray;
}
catch (IOException e)
{
//...
}
虽然这个方法可以工作,但我希望能够使用Java 7中的NIO来更轻松/更好地完成这个任务。我猜我需要获取一个Path对象来表示类路径上的这个路径,但我不确定该怎么做。
如果这是一个非常容易的事情,我道歉。我只是无法弄清楚。感谢您的帮助。
YourClass.class.getResourceAsStream(filename);
吗? - Dan W