118

我只想将 a 转换为 a FileInputStreamInputStream我该怎么做?

例如

FileInputStream fis = new FileInputStream("c://filename");
InputStream is = ?; 
fis.close();
4

5 回答 5

138
InputStream is;

try {
    is = new FileInputStream("c://filename");

    is.close(); 
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

return is;
于 2012-06-19T12:21:18.750 回答
57
InputStream is = new FileInputStream("c://filename");
return is;
于 2012-06-19T12:17:38.737 回答
38

FileInputStream一个输入流。

FileInputStream fis = new FileInputStream("c://filename");
InputStream is = fis;
fis.close();  
return is;

当然,这不会做你想做的事;您返回的流已经关闭。只需返回 FileInputStream 并完成它。调用代码应该关闭它。

于 2012-06-19T12:16:24.733 回答
7

您通常会首先从输入流中读取,然后将其关闭。您可以将 FileInputStream 包装在另一个 InputStream(或 Reader)中。当您关闭包装流/阅读器时,它将自动关闭。

如果这是一个将 InputStream 返回给调用者的方法,那么调用者有责任在完成流后关闭它。如果你在你的方法中关闭它,调用者将无法使用它。

要回答您的一些评论...

要将内容 InputStream 发送到远程使用者,您可以将 InputStream 的内容写入 OutputStream,然后关闭两个流。

远程消费者对您创建的流对象一无所知。他只是在他将创建、读取和关闭的 InputStream 中接收内容。

于 2012-06-19T12:16:07.117 回答
2

如果将一个流包装到另一个流中,则不会关闭中间流,这非常重要:在完成使用外部流之前不要关闭它们。因为你也会关闭外部流。

于 2012-06-19T12:18:42.357 回答