这段代码是一个用于从指定 URL 下载文件的 Java 方法。

private void downloadFile(String urlStr, String filePath) {
//  String urlStr = 'http://dwbillcenter.alipay.com/downloadBillFile.resource?bizType=X&userId=X&fileType=X&bizDates=X&downloadFileName=X&fileId=X';
//  String filePath = '/Users/fund_bill_20160405.zip';
    URL url = null;
    HttpURLConnection httpUrlConnection = null;
    InputStream fis = null;
    FileOutputStream fos = null;
    try {
        url = new URL(urlStr);
        httpUrlConnection = (HttpURLConnection) url.openConnection();
        httpUrlConnection.setConnectTimeout(DOWNLOD_CON_TIMEOUT);
        httpUrlConnection.setDoInput(true);
        httpUrlConnection.setDoOutput(true);
        httpUrlConnection.setUseCaches(false);
        httpUrlConnection.setRequestMethod(HTTP_TYPE);
        httpUrlConnection.setRequestProperty(HTTP_REQUEST_CHARSERT, ConCommConstant.ENCODING_UTF_8);
        httpUrlConnection.connect();
        fis = httpUrlConnection.getInputStream();
        byte[] temp = new byte[1024];
        int b;
        fos = new FileOutputStream(new File(filePath));
        while ((b = fis.read(temp)) != -1) {
            fos.write(temp, 0, b);
            fos.flush();
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (fis != null) fis.close();
            if (fos != null) fos.close();
            if (httpUrlConnection != null) httpUrlConnection.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

代码解释:

  1. 参数:
    • urlStr: 要下载文件的 URL 地址。
    • filePath: 要保存文件的本地路径。
  2. 创建连接:
    • 使用 URL 类创建 URL 对象,表示要下载的 URL 地址。
    • 使用 URL.openConnection() 方法获取 HttpURLConnection 对象,用于建立 HTTP 连接。
    • 设置连接超时时间:httpUrlConnection.setConnectTimeout(DOWNLOD_CON_TIMEOUT)
  3. 配置请求:
    • 设置允许输入和输出流:httpUrlConnection.setDoInput(true)httpUrlConnection.setDoOutput(true)
    • 禁用缓存:httpUrlConnection.setUseCaches(false)
    • 设置请求方法:httpUrlConnection.setRequestMethod(HTTP_TYPE) (默认 GET 方法)
    • 设置请求的字符集:httpUrlConnection.setRequestProperty(HTTP_REQUEST_CHARSERT, ConCommConstant.ENCODING_UTF_8)
  4. 建立连接:
    • 使用 httpUrlConnection.connect() 建立连接到指定的 URL。
  5. 获取数据:
    • 获取 URL 的输入流:fis = httpUrlConnection.getInputStream()
    • 创建一个临时字节数组:byte[] temp = new byte[1024] 用于存储从输入流读取的数据。
    • 创建一个文件输出流:fos = new FileOutputStream(new File(filePath)) 用于将下载的文件写入本地文件。
  6. 循环读取和写入数据:
    • 使用 while 循环读取输入流中的数据,直到读取完毕:while ((b = fis.read(temp)) != -1)
    • 将读取的数据写入文件输出流:fos.write(temp, 0, b)
    • 刷新文件输出流:fos.flush()
  7. 关闭资源:
    • finally 代码块中,关闭所有资源,以释放资源并避免内存泄漏:
      • 关闭输入流:fis.close()
      • 关闭文件输出流:fos.close()
      • 断开 HTTP 连接:httpUrlConnection.disconnect()
  8. 处理异常:
    • 使用 try...catch 代码块捕获可能发生的异常,例如 MalformedURLException (URL 格式错误)和 IOException (IO 操作异常)

总结:

这段代码实现了从指定 URL 下载文件并将其保存到本地路径的功能。代码利用 Java 的 HttpURLConnection 类建立 HTTP 连接,并通过输入流和输出流完成数据传输。代码还包含了错误处理和资源释放,保证代码的稳定性和健壮性。


原文地址: https://www.cveoy.top/t/topic/o3pB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录