1、问题简介
通过文件的url,将文件下载到本地。文件存储的位置为:tomcat服务器的文件夹(通过读取PRoperties文件:可看:http://www.cnblogs.com/0201zcr/p/4700418.html)
2、实现思路
读取properties文件,将获得文件将要存储的位置
通过java的Url类,将网上的文件下载到本地
3、代码实现
1)、读取properties文件(这里建立的是一个web project)
packagecom.zcr.until;importjava.io.BufferedInputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.util.Properties;publicclassGetFilePlace
{/*** 读取文件,获取保存的根目录
*@return保存的根目录*/publicString getFilePath(String fileProperties)
{
String dir= System.getProperty("user.dir");//获得tomcat所在的工作路径//获取到存储了文件存储位置的filedir.properties 文件路径//String realDir = dir + File.separator + "src" + File.separator +"META-INF" + File.separator + "config" + File.separator + "picture.properties";String realDir = dir.substring(0, dir.length()-4) + File.separator +"webapps" + File.separator + "appDataGenerate" +File.separator + "WEB-INF"
+ File.separator + "classes" + File.separator + "META-INF" + File.separator + "config" + File.separator +fileProperties;/*String realDir = dir.substring(0, dir.length()-4) + File.separator +"webapps" + File.separator + "appDataGenerate"
+ File.separator + "classes" + File.separator + "META-INF" + File.separator + "config" + File.separator + fileProperties;*/System.out.println("realDir = " +realDir);returnrealDir;
}/*** 获取filePath路径【properities文件】中key对应的值,
*@paramfilePath properities文件路径【包含properities文件】
*@paramkey 要查找的key值
*@returnkey对应的value*/publicString GetValueByKey(String filePath, String key)
{
Properties pps=newProperties();try{
InputStream in=newBufferedInputStream (newFileInputStream(filePath));
pps.load(in);
String value=pps.getProperty(key);
in.close();returnvalue;
}catch(IOException e) {
e.printStackTrace();returnnull;
}
}/*** 查询properities文件中可以对应的存储地点
*@paramkey 查询主键
*@returnkey对应的存储地址*/publicString getFileDirFromProperties(String key,String fileProperties)
{returnGetValueByKey(getFilePath(fileProperties),key);
}publicstaticvoidmain(String[] args)
{
System.out.println(newGetFilePlace().getFileDirFromProperties("brandLogo","picture.properties"));
}
}
2)、文件下载类
packagecom.zcr.until;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.MalformedURLException;importjava.net.URL;importjava.net.URLConnection;importjavax.servlet.http.HttpServletRequest;publicclassURLConnectionDownloader
{
//单纯测试下载publicstaticvoidmain(String[] args)
{
download("http://stocardapp.s3-external-3.amazonaws.com/ios/icons/1001tur@2x.png", "E:\\xiazai.jpg");
}/*** 将urlString的文件下载到
*@paramfilePathName properties文件中的文件存储名
*@paramfileProperties 查找的properties文件
*@paramurlString 待下载的文件url
*@paramfileName 生成的文件名称*/publicstaticvoiddownloadToSelectedFolder(String filePathName,String fileProperties,String urlString,String fileName,HttpServletRequest request)
{//获得picture.properties 文件中,key为android_banner_url的值String pathSavePath =newGetFilePlace().getFileDirFromProperties("android_banner_url","picture.properties");//获得服务器(tomcat)pathSavePath的相对位置String path =request.getsession().getServletContext().getRealPath(pathSavePath);//获得文件存储的绝对路径String generateFileName = path + File.separator +fileName;
download(urlString,generateFileName);
}/*** 下载文件到本地
*
*@paramurlString
* 被下载的文件地址
*@paramfilename
* 本地文件名*/publicstaticvoiddownload(String urlString, String filename)
{//构造URLURL url;try{
url=newURL(urlString);//打开连接URLConnection con =url.openConnection();//输入流InputStream is =con.getInputStream();//1K的数据缓冲byte[] bs =newbyte[1024];//读取到的数据长度intlen;//输出的文件流sOutputStream os =newFileOutputStream(filename);//开始读取while((len = is.read(bs)) != -1) {
os.write(bs,0, len);
}//完毕,关闭所有链接os.close();
is.close();
}catch(MalformedURLException e)
{//TODO Auto-generated catch blocke.printStackTrace();
}catch(IOException e)
{//TODO Auto-generated catch blocke.printStackTrace();
}
}
}
3)、网页调用
URLConnectionDownloader.downloadToSelectedFolder("android_banner_url","picture.properties","http://stocardapp.s3-external-3.amazonaws.com/ios/icons/1001tur@2x.png","2x.png",request);
4)、测试结果
网页的图片:
下载的图片
致谢:感谢您的阅读!