使用java在网站上下载文件的最快方法

xuq*_*019 2 java url

我正在编写一个Java代码,使用http协议在网站上下载大量的zip文件,每个文件的大小约为1MB(1024KB).

我知道有很多方法可以做到这一点.我只是徘徊,这是最快的,我想知道每个下载的进度,如显示百分比数字或其他东西.

我只是提供我的代码版本,关于如何改进它的任何想法?

谢谢大家.

 public static void downloadFile(String downloadUrl , String fileName) throws Exception {
    URL url=new URL(downloadUrl); 
    URLConnection connection = url.openConnection();
    int filesize = connection.getContentLength(); 
    float totalDataRead=0; 
    java.io.BufferedInputStream in = new java.io.BufferedInputStream(connection.getInputStream()); 
    java.io.FileOutputStream fos = new java.io.FileOutputStream(fileName); 
    java.io.BufferedOutputStream bout = new BufferedOutputStream(fos,1024);
    byte[] data = new byte[1024]; 
    int i=0; 
    while((i=in.read(data,0,1024))>=0) { 
        totalDataRead=totalDataRead+i; 
        bout.write(data,0,i); 
        float Percent=(totalDataRead*100)/filesize;
        System.out.println((int)Percent);
    }    
    bout.close(); 
    in.close();
}
Run Code Online (Sandbox Code Playgroud)

Jas*_*n C 5

你过早地进行了优化.网络带宽瓶颈可能远远超过您正在进行的任何处理.

您不需要将InputStream包装在BufferedInputStream中.您可能希望支持更大的读取缓冲区大小,但这可能具有最小的影响,具体取决于连接返回的InputStream的底层实现,内核级缓冲等.

对于进度条,取你目前所读的内容并将其除以connection.getContentLength(),但请注意,如果长度未知,则getContentLength()可能返回-1(它只是给出Content-length的值)头).在您阅读数据时,将进度信息传递给您选择要执行的操作以将其显示给用户.

  • @ xuqin1019您可以使用Apache commons IO,它会为您节省几行代码(但添加一个库) (2认同)