从URL下载Java文件

时间:2020-02-23 14:36:30  来源:igfitidea点击:

今天,我们将学习如何从Java中的URL下载文件。
我们可以使用java.net.URL openStream()方法从Java程序中的URL下载文件。
我们可以使用Java NIO Channels或者Java IO InputStream从URL打开流中读取数据,然后将其保存到文件中。

从URL下载Java文件

这是来自URL示例程序的简单Java下载文件。
它显示了从Java中的URL下载文件的两种方法。

JavaDownloadFileFromURL.java

package com.theitroad.files;

import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;

public class JavaDownloadFileFromURL {

  public static void main(String[] args) {
      String url = "https://www.theitroad.local/sitemap.xml";
      
      try {
          downloadUsingNIO(url, "/Users/hyman/sitemap.xml");
          
          downloadUsingStream(url, "/Users/hyman/sitemap_stream.xml");
      } catch (IOException e) {
          e.printStackTrace();
      }
  }

  private static void downloadUsingStream(String urlStr, String file) throws IOException{
      URL url = new URL(urlStr);
      BufferedInputStream bis = new BufferedInputStream(url.openStream());
      FileOutputStream fis = new FileOutputStream(file);
      byte[] buffer = new byte[1024];
      int count=0;
      while((count = bis.read(buffer,0,1024)) != -1)
      {
          fis.write(buffer, 0, count);
      }
      fis.close();
      bis.close();
  }

  private static void downloadUsingNIO(String urlStr, String file) throws IOException {
      URL url = new URL(urlStr);
      ReadableByteChannel rbc = Channels.newChannel(url.openStream());
      FileOutputStream fos = new FileOutputStream(file);
      fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
      fos.close();
      rbc.close();
  }

}

downloadUsingStream:在这种从URL下载Java文件的方法中,我们使用URLopenStream方法创建输入流。
然后,我们使用文件输出流从输入流中读取数据并写入文件。

downloadUsingNIO:在此从URL下载文件的方法中,我们从URL流数据创建字节通道。
然后使用文件输出流将其写入文件。