我正在尝试从jar存档运行程序时读取文本文件。 我来accros我需要使用InputStream来读取文件。代码片段:
buffer = new BufferedInputStream(this.getClass().getResourceAsStream((getClass().getClassLoader().getResource("English_names.txt").getPath())));
System.out.println(buffer.read()+" yeas");
此行System.out.println(buffer.read()+" yeas");
程序停止,此后没有任何反应。输出buffer
对象的内容后,它不为空。
可能是什么问题?
答案 0 :(得分:1)
此方法将阻塞,直到输入数据可用,检测到流的末尾或抛出异常。
所以基本上,流似乎在等待内容。我猜你是如何构建流的,你可以简化你的构造:
InputStream resourceStream = getClass().getResourceAsStream("/English_names.txt");
InputStream buffer = new BufferedInputStream(resourceStream);
我还要检查以确保resourceStream
不为空。
答案 1 :(得分:0)
在传递给InputStream
构造函数时,您不应该担心null
为BufferedInputStream
,因为构造函数处理null
参数就好了。当提供null
时,它将返回null
而不会抛出任何异常。此外,由于InputStream
实施AutoClosable
,try-with-resources
块将正确关闭您的流。
try (
final InputStream is = getClass().getResourceAsStream("/English_names.txt");
final BufferedInputStream bis = new BufferedInputStream(is);
) {
if (null == bis)
throw new IOException("requsted resource was not found");
// Do your reading.
// Do note that if you are using InputStream.read() you may want to call it in a loop until it returns -1
} catch (IOException ex) {
// Either resource is not found or other I/O error occurred
}