我惊奇地发现,今天我找不到任何简单的方法来用Java将InputStream的内容写入OutputStream。显然,编写字节缓冲区代码并不难,但我怀疑我只是缺少了一些可以使我的工作更简单(并且代码更清晰)的东西。
那么,给定一个InputStream in和一个OutputStream out,是否有一种更简单的方法来编写下面的代码?
byte[] buffer = new byte[1024];
int len = in.read(buffer);
while (len != -1) {
out.write(buffer, 0, len);
len = in.read(buffer);
}
如果你正在使用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)