可能许多朋友在编程的时候需要编写文件下载的接口来实现文件下载,这篇文章给大家提供一段经过测试并且比较实用的文件下载方法供大家学习交流。先上代码
public static void download(String httpUrl,String saveFile){
// 下载网络文件
long bytesum = 0;
int byteread = 0;
long bytetotal = 0;
FileOutputStream fs = null;
URL url = null;
try {
url = new URL(httpUrl);
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
try {
int timeout = 30;
URLConnection conn = url.openConnection();
conn.setConnectTimeout(timeout*1000);
conn.setReadTimeout(timeout*1000);
InputStream inStream = conn.getInputStream();
fs = new FileOutputStream(saveFile);
bytetotal = conn.getContentLength();
byte[] buffer = new byte[1024];
while ((byteread = inStream.read(buffer)) != -1) {
bytesum += byteread;
//这里可以计算下载的进度,根据你的需要进行操作
fs.write(buffer, 0, byteread);
}
if(bytesum!=bytetotal){//文件不匹配时,直接返回
//结果不匹配,按照你的需要进行操作
//your code
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
if(fs!=null){
try{fs.close();fs=null;}catch(Exception e){e.printStackTrace();}
}
}
}
文件下载就是将一个url所指向的文件保存到一个文件里面去,但是许多资源分为直链和外链,直链就是直接根据链接就可以下载文件,外链是通过java方法指向某个文件,再将文件以流的形式传到用户。就是说外链可能有许多其他的限制,比如身份验证什么之类的。博主给的例子只针对直链。如果大家要对外链进行下载的话,就必须生成直链再进行下载。
在这里,首先定义一个文件输出流和一个url。根据url地址创建一个url连接。当然,任何的连接都有超时时间,大家可以根据自身情况设置。然后我们可以根据链接的Contentlength获取到文件的总大小,再从连接中获得输入流。这个输入流就是我们url链接所对应文件产生的输入流,接下来就是将输入流里面的东西存储到本地文件中。
在实际操作中,下面两点大家可以结合自身情况进行使用:
1、在循环读取流的过程中我们可以间接地获取到文件下载的当前进度。
2、下载完成后可以根据读取的总大小和url链接所提供的大小进行匹配来简单地判断文件大小是否一样,从而保证文件下载的正确性。
3、对于下载中的异常,大家可以根据自身情况进行消息处理和捕获