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

2022-08-31 04:24:43

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

那么,给定 一个和一个,有没有更简单的方法来编写以下内容?InputStreaminOutputStreamout

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

答案 1

正如WMR所提到的,Apache有一个名为copy(InputStream,OutputStream)的方法,它完全符合您的要求。org.apache.commons.io.IOUtils

因此,您有:

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

...在代码中。

你有理由避免吗?IOUtils


答案 2

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

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

编辑:当然,当您从文件创建输入流或输出流之一时,它很有用。用于从文件获取路径。file.toPath()

要写入现有文件(例如,使用 创建的文件),您需要传递复制选项(否则会被抛出):File.createTempFile()REPLACE_EXISTINGFileAlreadyExistsException

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

推荐