• 通过url 下载文件


    1、问题简介

      通过文件的url,将文件下载到本地。文件存储的位置为:tomcat服务器的文件夹(通过读取properties文件:可看:http://www.cnblogs.com/0201zcr/p/4700418.html

    2、实现思路

      读取properties文件,将获得文件将要存储的位置

      通过java的Url类,将网上的文件下载到本地

    3、代码实现

    1)、读取properties文件(这里建立的是一个web project)

    package com.zcr.until;
    
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    public class GetFilePlace 
    {
        /**
         * 读取文件,获取保存的根目录
         * @return  保存的根目录
         */
        public   String 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);
            return realDir;
        }
        
        
        /**
         * 获取filePath路径【properities文件】中key对应的值,
         * @param filePath properities文件路径【包含properities文件】
         * @param key 要查找的key值
         * @return key对应的value
         */
         public   String GetValueByKey(String filePath, String key) 
         {
             Properties pps = new Properties();
             try {
                  InputStream in = new BufferedInputStream (new FileInputStream(filePath));  
                  pps.load(in);
                 String value = pps.getProperty(key);
                 in.close();
                 return value;
                 
             }catch (IOException e) {
                 e.printStackTrace();
                 return null;
             }
         }
        
        /**
         * 查询properities文件中可以对应的存储地点
         * @param key 查询主键
         * @return    key对应的存储地址
         */
        public  String getFileDirFromProperties(String key,String fileProperties)
        {
            return GetValueByKey(getFilePath(fileProperties),key);
        }
        
        public static void main(String[] args)
        {
            System.out.println(new GetFilePlace().getFileDirFromProperties("brandLogo","picture.properties"));
        }
    }

    2)、文件下载类

    package com.zcr.until;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    
    import javax.servlet.http.HttpServletRequest;
    
    public class URLConnectionDownloader
    {    
    //单纯测试下载
    public static void main(String[] args) { download("http://stocardapp.s3-external-3.amazonaws.com/ios/icons/1001tur@2x.png", "E:\xiazai.jpg"); } /** * 将urlString的文件下载到 * @param filePathName properties文件中的文件存储名 * @param fileProperties 查找的properties文件 * @param urlString 待下载的文件url * @param fileName 生成的文件名称 */ public static void downloadToSelectedFolder(String filePathName,String fileProperties,String urlString,String fileName,HttpServletRequest request) { //获得picture.properties 文件中,key为android_banner_url的值 String pathSavePath = new GetFilePlace().getFileDirFromProperties("android_banner_url","picture.properties"); //获得服务器(tomcat)pathSavePath的相对位置 String path = request.getSession().getServletContext().getRealPath(pathSavePath); //获得文件存储的绝对路径 String generateFileName = path + File.separator + fileName; download(urlString,generateFileName); } /** * 下载文件到本地 * * @param urlString * 被下载的文件地址 * @param filename * 本地文件名 */ public static void download(String urlString, String filename) { // 构造URL URL url; try { url = new URL(urlString); // 打开连接 URLConnection con = url.openConnection(); // 输入流 InputStream is = con.getInputStream(); // 1K的数据缓冲 byte[] bs = new byte[1024]; // 读取到的数据长度 int len; // 输出的文件流s OutputStream os = new FileOutputStream(filename); // 开始读取 while ((len = is.read(bs)) != -1) { os.write(bs, 0, len); } // 完毕,关闭所有链接 os.close(); is.close(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.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)、测试结果

    网页的图片:

    下载的图片

      致谢:感谢您的阅读!

  • 相关阅读:
    51nod 1380 夹克老爷的逢三抽一 堆 脑洞题
    洛谷P2168 荷马史诗 堆 哈夫曼树
    HDU 4343 Interval query 倍增思想, DP
    洛谷P1969 积木大赛 贪心 差分
    codves1052 地鼠游戏 贪心
    hdu6031 Innumerable Ancestors
    Codeforces 278C Learning Languages(并查集) 求连通块
    [LeetCode]80. Remove Duplicates from Sorted Array II删除数组中的重复值
    [LeetCode]86. Partition List分离链表
    [LeetCode]42. Trapping Rain Water雨水填坑
  • 原文地址:https://www.cnblogs.com/0201zcr/p/4971271.html
Copyright © 2020-2023  润新知