/**
* 下载文件到本地
*
* @param urlString
* 被下载的文件地址
* @param filename
* 本地文件名
* @param timeout
* 超时时间毫秒
* @throws Exception
* 各种异常
*/
public static boolean download(String urlString, String filename,int timeout){
boolean ret = false;
File file = new File(filename);
try {
if(file.exists()){
ret = true;
}else{
// 构造URL
URL url = new URL(urlString);
// 打开连接
HttpURLConnection con = (HttpURLConnection )url.openConnection();
con.setConnectTimeout(timeout);
con.setReadTimeout(timeout);
con.connect();
int contentLength = con.getContentLength();
// 输入流
InputStream is = con.getInputStream();
// 1K的数据缓冲
byte[] bs = new byte[1024];
// 读取到的数据长度
int len;
// 输出的文件流
File file2=new File(file.getParent());
file2.mkdirs();
if(file.isDirectory()){
}else{
file.createNewFile();//创建文件
}
OutputStream os = new FileOutputStream(file);
// 开始读取
while ((len = is.read(bs)) != -1) {
os.write(bs, 0, len);
}
// 完毕,关闭所有链接
os.close();
is.close();
if(contentLength != file.length()){
file.delete();
ret = false;
}else{
ret = true;
}
}
} catch (IOException e) {
file.delete();
ret = false;
LOGGER.error("[VideoUtil:download]:\n" + " VIDEO URL:" + urlString + " \n NEW FILENAME:" + filename + " DOWNLOAD FAILED!! ");
}finally {
return ret;
}
}
/**
* 断点续传
* @param urlString
* @param filename
* @param timeout
* @return
*/
public static boolean resumeDownload(String urlString, String filename,int timeout) throws Exception{
boolean ret = false;
File fileFinal = new File(filename);
String tmpFileName = filename+".tmp";
File file = new File(tmpFileName);
try {
if(fileFinal.exists()){
ret = true;
}else{
long contentStart = 0;
File file2=new File(file.getParent());
if(file.exists()){
contentStart = file.length();
}else{
file2.mkdirs();
}
// 构造URL
URL url = new URL(urlString);
// 打开连接
HttpURLConnection con = (HttpURLConnection )url.openConnection();
con.setConnectTimeout(timeout);
con.setReadTimeout(timeout);
//设置续传的点
if(contentStart>0){
con.setRequestProperty("RANGE","bytes="+contentStart+"-");
}
con.connect();
int contentLength = con.getContentLength();
// 输入流
InputStream is = con.getInputStream();
// 100Kb的数据缓冲
byte[] bs = new byte[100*1024];
// 读取到的数据长度
int len;
RandomAccessFile oSavedFile = new RandomAccessFile(tmpFileName,"rw");
oSavedFile.seek(contentStart);
// 开始读取
while ((len = is.read(bs)) != -1) {
oSavedFile.write(bs, 0, len);
}
// 完毕,关闭所有链接
oSavedFile.close();
is.close();
file.renameTo(fileFinal);
ret = true;
}
} catch (IOException e) {
file.delete();
ret = false;
LOGGER.error("[VideoUtil:download]:\n" + " VIDEO URL:" + urlString + " \n NEW FILENAME:" + filename + " DOWNLOAD FAILED!! ");
throw new Exception(e);
}finally {
return ret;
}
}
java视频下载
最新推荐文章于 2024-07-19 21:04:03 发布