从InputStream对象读取文件

时间:2012-09-09 21:44:39

标签: java file inputstream

我正在尝试从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对象的内容后,它不为空。 可能是什么问题?

2 个答案:

答案 0 :(得分:1)

来自InputStream#read()

  

此方法将阻塞,直到输入数据可用,检测到流的末尾或抛出异常。

所以基本上,流似乎在等待内容。我猜你是如何构建流的,你可以简化你的构造:

InputStream resourceStream = getClass().getResourceAsStream("/English_names.txt");
InputStream buffer = new BufferedInputStream(resourceStream);

我还要检查以确保resourceStream不为空。

答案 1 :(得分:0)

在传递给InputStream构造函数时,您不应该担心nullBufferedInputStream,因为构造函数处理null参数就好了。当提供null时,它将返回null而不会抛出任何异常。此外,由于InputStream实施AutoClosabletry-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 
    }