如何下载大文件并在本地获取路径位置

时间:2015-10-20 13:17:13

标签: java

我提到了这个链接,代码工作正常。 但是如果文件的大小超过1 GB呢?我们可以直接写入磁盘上的输出文件而不是创建一个中间的ByteArrayOutputStream吗?

How to download a file and get the path location locally

1 个答案:

答案 0 :(得分:1)

是的,你可以。

您可以直接将文件内容写入磁盘(而不是创建中间版ByteArrayOutputStream。(

)。

您可以使用网址返回的InputStreamFileOutputStream,或者如果您可以使用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());
}