我提到了这个链接,代码工作正常。 但是如果文件的大小超过1 GB呢?我们可以直接写入磁盘上的输出文件而不是创建一个中间的ByteArrayOutputStream吗?
答案 0 :(得分:1)
是的,你可以。
您可以直接将文件内容写入磁盘(而不是创建中间版ByteArrayOutputStream
。(
您可以使用网址返回的InputStream
和FileOutputStream
,或者如果您可以使用Java 8,则应使用Files.copy()
。
另一方面,如果您不能使用Java 8,您也可以使用apache commons-io中的IOUtils
。它有一个非常简单的方法:
public static long copyLarge(InputStream input, OutputStream output)
这是一个Java 8示例:
public void testDonwloadUsingJava8() throws Exception {
URL image = new URL("http://learning.es/blog/wp-content/uploads/2014/08/java.jpg");
Path tempFile = Files.createTempFile("test-java8-", ".jpg");
Files.copy(image.openStream(), tempFile, StandardCopyOption.REPLACE_EXISTING);
System.out.println(tempFile.toString());
System.out.println(tempFile.toFile().length());
}
如果你必须使用旧版本的java:
,这是一个例子public void testDownloadFile() throws Exception{
URL image = new URL("http://learning.es/blog/wp-content/uploads/2014/08/java.jpg");
File tempFile = File.createTempFile("test-", ".jpg");
OutputStream output = new FileOutputStream(tempFile);
try{
IOUtils.copyLarge(image.openStream(), output);
} finally {
output.close();
}
System.out.println(tempFile.getPath());
System.out.println(tempFile.length());
}