import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class URLDownFileUtils {
//测试
public static void main(String[] args) throws Exception {
saveUrlAs("http://www.xinhuanet.com/video/titlepic/121022/1210224056_1564625224346_title0h.jpg", "d:/123","1210224056_1564625224346_title0h.jpg", 3096);
}
private static int timeOutVal=0;
static{
// 读取超时配置文件
PropertiesUtil pro=new PropertiesUtil("timeOut.properties");
timeOutVal=Integer.parseInt(pro.readProperty("timeOut"));
}
/**
* 使用 java根据 url 直接下载文件
* @param url 文件的url 地址
* @param basePath 保存文件的 本地地址
* @param filename 文件名称
* @param inputStreamNum 文件传输时的最大字节流
* @throws Exception
*/
public static boolean saveUrlAs(String url,String basePath,String filename,int inputStreamNum) throws Exception{
//
File file=new File(basePath);
//判断文件夹是否存在
if (!file.exists())
{
//如果文件夹不存在,则创建新的的文件夹
file.mkdirs();
}
FileOutputStream fileOut = null;
HttpURLConnection conn = null;
InputStream inputStream = null;
try
{
// 建立链接
URL httpUrl=new URL(url);
conn=(HttpURLConnection) httpUrl.openConnection();
//十分钟超时设置
conn.setConnectTimeout(timeOutVal);
conn.setReadTimeout(timeOutVal);
// 处理图片下载 403 问题
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36");
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setDoOutput(true);
// post方式不能使用缓存
conn.setUseCaches(false);
//连接指定的资源
conn.connect();
//获取网络输入流
inputStream=conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(inputStream);
//判断文件的保存路径后面是否以/结尾
if (!basePath.endsWith("/")) {
basePath += "/";
}
//写入到文件(注意文件保存路径的后面一定要加上文件的名称)
fileOut = new FileOutputStream(basePath+filename);
BufferedOutputStream bos = new BufferedOutputStream(fileOut);
byte[] buf = new byte[inputStreamNum];
int length = bis.read(buf);
//保存文件
while(length != -1)
{
bos.write(buf, 0, length);
length = bis.read(buf);
}
bos.close();
bis.close();
conn.disconnect();
return true;
} catch (Exception e)
{
e.printStackTrace();
return false;
}
}
}