Java 代码实现文件下载功能 - 从 URL 下载文件到本地
这段代码是一个用于从指定 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();
}
}
}
代码解释:
- 参数:
urlStr: 要下载文件的 URL 地址。filePath: 要保存文件的本地路径。
- 创建连接:
- 使用
URL类创建 URL 对象,表示要下载的 URL 地址。 - 使用
URL.openConnection()方法获取HttpURLConnection对象,用于建立 HTTP 连接。 - 设置连接超时时间:
httpUrlConnection.setConnectTimeout(DOWNLOD_CON_TIMEOUT)
- 使用
- 配置请求:
- 设置允许输入和输出流:
httpUrlConnection.setDoInput(true)和httpUrlConnection.setDoOutput(true) - 禁用缓存:
httpUrlConnection.setUseCaches(false) - 设置请求方法:
httpUrlConnection.setRequestMethod(HTTP_TYPE)(默认 GET 方法) - 设置请求的字符集:
httpUrlConnection.setRequestProperty(HTTP_REQUEST_CHARSERT, ConCommConstant.ENCODING_UTF_8)
- 设置允许输入和输出流:
- 建立连接:
- 使用
httpUrlConnection.connect()建立连接到指定的 URL。
- 使用
- 获取数据:
- 获取 URL 的输入流:
fis = httpUrlConnection.getInputStream() - 创建一个临时字节数组:
byte[] temp = new byte[1024]用于存储从输入流读取的数据。 - 创建一个文件输出流:
fos = new FileOutputStream(new File(filePath))用于将下载的文件写入本地文件。
- 获取 URL 的输入流:
- 循环读取和写入数据:
- 使用
while循环读取输入流中的数据,直到读取完毕:while ((b = fis.read(temp)) != -1) - 将读取的数据写入文件输出流:
fos.write(temp, 0, b) - 刷新文件输出流:
fos.flush()
- 使用
- 关闭资源:
- 在
finally代码块中,关闭所有资源,以释放资源并避免内存泄漏:- 关闭输入流:
fis.close() - 关闭文件输出流:
fos.close() - 断开 HTTP 连接:
httpUrlConnection.disconnect()
- 关闭输入流:
- 在
- 处理异常:
- 使用
try...catch代码块捕获可能发生的异常,例如MalformedURLException(URL 格式错误)和IOException(IO 操作异常)
- 使用
总结:
这段代码实现了从指定 URL 下载文件并将其保存到本地路径的功能。代码利用 Java 的 HttpURLConnection 类建立 HTTP 连接,并通过输入流和输出流完成数据传输。代码还包含了错误处理和资源释放,保证代码的稳定性和健壮性。
原文地址: https://www.cveoy.top/t/topic/o3pB 著作权归作者所有。请勿转载和采集!