• java+根据多个url批量下载文件


    1.基本流程
    当我们想要下载网站上的某个资源时,我们会获取一个url,它是服务器定位资源的一个描述,下载的过程有如下几步:
    (1)客户端发起一个url请求,获取连接对象。
    (2)服务器解析url,并且将指定的资源返回一个输入流给客户。
    (3)建立存储的目录以及保存的文件名。
    (4)输出了写数据。
    (5)关闭输入流和输出流。
    2.实现代码的方法
    /**

         * 从网络Url中下载文件

         * @param urlStr

         * @param fileName

         * @param savePath

         * @throws IOException

         */

        public static void  downLoadFromUrl(String urlStr,String fileName,String savePath) throws IOException{

            URL url = new URL(urlStr); 

            HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 

                    //设置超时间为3秒

            conn.setConnectTimeout(3*1000);

            //防止屏蔽程序抓取而返回403错误

            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");

     

            //得到输入流

            InputStream inputStream = conn.getInputStream(); 

            //获取自己数组

            byte[] getData = readInputStream(inputStream);   

     

            //文件保存位置

            File saveDir = new File(savePath);

            if(!saveDir.exists()){

                saveDir.mkdir();

            }

            File file = new File(saveDir+File.separator+fileName);   

            FileOutputStream fos = new FileOutputStream(file);    

            fos.write(getData);

            if(fos!=null){

                fos.close(); 

            }

            if(inputStream!=null){

                inputStream.close();

            }

     

     

            System.out.println("info:"+url+" download success");

     

        }

     

     

     

        /**

         * 从输入流中获取字节数组

         * @param inputStream

         * @return

         * @throws IOException

         */

        public static byte[] readInputStream(InputStream inputStream) throws IOException { 

            byte[] buffer = new byte[1024]; 

            int len = 0; 

            ByteArrayOutputStream bos = new ByteArrayOutputStream(); 

            while((len = inputStream.read(buffer)) != -1) { 

                bos.write(buffer, 0, len); 

            } 

            bos.close(); 

            return bos.toByteArray(); 

        } 

     

        public static void main(String[] args) {

            try{

                downLoadFromUrl("http://101.95.48.97:8005/res/upload/interface/apptutorials/manualstypeico/6f83ce8f-0da5-49b3-bac8-fd5fc67d2725.png",

                        "百度.jpg","d:/resource/images/diaodiao/country/");

            }catch (Exception e) {

                // TODO: handle exception

            }

        }

     

    效果展现:


    详细配置可参考我写的这篇文章:

    http://blog.ncmem.com/wordpress/2019/08/28/java%e6%89%b9%e9%87%8f%e4%b8%8b%e8%bd%bd/ 

  • 相关阅读:
    .Net/C# 应用程序直接读取本地 Cookies 文件(WinXP SP2 调用 API: InternetGetCookie 无果)
    wininet.dll函数库:不会过期的cookie
    WinForm中TextBox控件循环自动滚动示例
    JScript中Date.getTime转.Net中的DateTime
    js gettime c# ticks
    mysql查看整库个表详情
    rds分区实践
    mysql5.7.21源码安装
    EXPLAIN详解
    C#基础温习(4):C#中string数组和list的相互转换
  • 原文地址:https://www.cnblogs.com/songsu/p/11307097.html
Copyright © 2020-2023  润新知