简单的方法将Java InputStream的内容写入OutputStream

今天我惊讶地发现,我无法找到任何简单的方法将InputStream的内容写入到Java中的OutputStream中。 显然,字节缓冲区代码不难写,但我怀疑我只是错过了一些可以让我的生活更轻松(代码更清晰)的东西。

所以,如果InputStream inOutputStream out ,是否有更简单的方法来编写以下内容?

byte[] buffer = new byte[1024];
int len = in.read(buffer);
while (len != -1) {
    out.write(buffer, 0, len);
    len = in.read(buffer);
}

正如WMR提到的,来自Apache的org.apache.commons.io.IOUtils有一个名为copy(InputStream,OutputStream) ,它正是您要查找的内容。

所以你有了:

InputStream in;
OutputStream out;
IOUtils.copy(in,out);
in.close();
out.close();

...在你的代码中。

你有避免IOUtils的原因吗?


如果您使用Java 7,则文件(在标准库中)是最好的方法:

/* You can get Path from file also: file.toPath() */
Files.copy(InputStream in, Path target)
Files.copy(Path source, OutputStream out)

编辑:当你从文件创建一个InputStream或OutputStream时,它当然很有用。 使用file.toPath()从文件获取路径。

要写入现有文件(例如使用File.createTempFile()创建的文件),您需要传递REPLACE_EXISTING复制选项(否则引发FileAlreadyExistsException ):

Files.copy(in, target, StandardCopyOption.REPLACE_EXISTING)

我认为这会起作用,但要确保测试它......微小的“改进”,但在可读性方面可能会有点成本。

byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {
    out.write(buffer, 0, len);
}
链接地址: http://www.djcxy.com/p/78459.html

上一篇: Easy way to write contents of a Java InputStream to an OutputStream

下一篇: Android FTP download exception (file not found)