通过URL链接将文件下载到本地

URL链接将文件下载到本地

 public File downUrlTxt(String fileUrl){
        String fileName = DataUtils.getNumberByUUId();//调用工具类生成唯一标识文件名
        File savePath = new File(downPath);//downPath是自定义的文件下载地址,如 D://huoyun/
        if (!savePath.exists()) {//判断文件夹是否存在,不存在则创建一个叫huoyun的文件夹
            savePath.mkdir();
        }

        String[] urlname = fileUrl.split("/");//将链接地址以/剪切成字符串数组
        int len = urlname.length-1;//数组长度
        String uname = urlname[len];//获取文件名
        int i = uname.lastIndexOf(".");//最后一个.的下标
        String suf = uname.substring(i + 1);//获取文件后缀名
        try {
            File file = new File(savePath+"/"+fileName+"."+suf);//创建新文件(路径+文件名+后缀名)
            if(file!=null && !file.exists()){   //判断改文件是否存在,不存在则新创建
                file.createNewFile();
            }
            OutputStream oputstream = new FileOutputStream(file);//新建输出流
            URL url = new URL(fileUrl);//新建URL文件对象
            HttpURLConnection uc = (HttpURLConnection) url.openConnection();//创建连接
            uc.setDoInput(true);//设置是否要从 URL 连接读取数据,默认为true
            uc.connect();//连接启动
            InputStream iputstream = uc.getInputStream();//从远程连接获取输入流
            System.out.println("file size is:"+uc.getContentLength());//打印文件长度
            byte[] buffer = new byte[4*1024];//定义4k长的数组
            int byteRead = -1;
            while((byteRead=(iputstream.read(buffer)))!= -1){//通过输入流读取数据
                oputstream.write(buffer, 0, byteRead);//将字节数组的数据通过输出流输出
            }
            oputstream.flush();//刷新流
            iputstream.close();//关闭输入流
            oputstream.close();//关闭输出流
        } catch (Exception e) {
            System.out.println("读取失败!");
            e.printStackTrace();
        }
        System.out.println("生成文件路径:"+downPath+fileName+"."+suf);
        File file = new File(downPath + fileName+"."+suf);//获取到生成的本地文件对象
        return file;
    }
posted @ 2022-05-30 23:11  打个大大西瓜  阅读(2035)  评论(0编辑  收藏  举报