Java教程

java下载文件工具类

本文主要是介绍java下载文件工具类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

java下载文件工具类

package com.skjd.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.servlet.http.HttpServletResponse;public class DownloadUtils {    /**
     * 根据网络url下载文件
     * 下载到指定文件
     * @throws MalformedURLException 
     */
    public static void DownloadByUrlToFile(String urlPath,String filename2) throws Exception{        
        URL url = new URL(urlPath);/*        //文件后缀名
        String str = url.getFile().substring( url.getFile().lastIndexOf(".")+1);
        //文件名
        String filename = url.getFile().substring(url.getFile().lastIndexOf("/")+1,url.getFile().lastIndexOf("."));*/
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();      
        int code = conn.getResponseCode();        if (code != HttpURLConnection.HTTP_OK) {            throw new Exception("文件读取失败");
        }
        InputStream fis = new BufferedInputStream(conn.getInputStream());
        File file = new File(filename2);
        OutputStream toClient = new BufferedOutputStream(new FileOutputStream(file));        // 以流的形式下载文件。
        byte[] buffer = new byte[1024*8];  
        int read=0;        //如果没有数据了会返回-1;如果还有会返回数据的长度
        while ((read = fis.read(buffer))!=-1) {            //读取多少输出多少
            toClient.write(buffer,0,read);
        }    
        toClient.flush();
        toClient.close();
        fis.close();        
    }     /**
     * 根据网络url下载文件
     * 直接返回给浏览器
     * @throws MalformedURLException 
     */
    public static void DownloadByUrl(String urlPath,HttpServletResponse response) throws Exception{        
         URL url = new URL(urlPath);         //文件后缀名
         String str = url.getFile().substring( url.getFile().lastIndexOf(".")+1);         //文件名
         String filename = url.getFile().substring(url.getFile().lastIndexOf("/")+1,url.getFile().lastIndexOf("."));
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();      
        int code = conn.getResponseCode();        if (code != HttpURLConnection.HTTP_OK) {            throw new Exception("文件读取失败");
        }
        InputStream fis = new BufferedInputStream(conn.getInputStream());
        OutputStream toClient = new BufferedOutputStream(response.getOutputStream());        // 设置response的Header
        response.addHeader("Content-Disposition", "attachment;filename=" +filename+"."+str); 
        response.setContentType("application/octet-stream");  
        // 以流的形式下载文件。
        byte[] buffer = new byte[1024*8];  
        int read=0;        //如果没有数据了会返回-1;如果还有会返回数据的长度
        while ((read = fis.read(buffer))!=-1) {            //读取多少输出多少
            toClient.write(buffer,0,read);
          }    
        toClient.flush();
        toClient.close();
        fis.close();
      
      
        
    }
}

使用案例代码

/**
     * 导出购票码     */
    @RequestMapping(value="/getAllCode")    public void getAllCode(HttpServletResponse response){
        PageData pd = new PageData();
        pd = this.getPageData();        try {
            Listlist = driverService.listAll(pd);               //获取当前项目的绝对路径
            String realPath = this.getRequest().getSession().getServletContext().getRealPath("/");
            File file = new File(realPath+"/codes/");            //判断是否存在这个文件夹,如果不存在则重新创建一个文件
            if(!file.exists()){
                file.mkdirs();
            }
            String url2="";
            Listlist3 = dictionariesService.getIMGUrl(null);            for(int i=0;i<list3.size();i++){                if(String.valueOf(list3.get(i).get("remarks")).length()>6){
                    url2=String.valueOf(list3.get(i).get("remarks"));
                }
            }            for(int i=0;i<list.size();i++){                  if(list.get(i).get("code_url")!=null&&!"".equals(String.valueOf(list.get(i).get("code_url")))){
                      DownloadUtils.DownloadByUrlToFile(url2+String.valueOf(list.get(i).get("code_url")),realPath+"/codes/"+String.valueOf(list.get(i).get("idcode"))+".png");
                  }               
            }
            FileZip.zip(realPath+"/codes/", realPath+"/codes.zip");
            InputStream fis = new BufferedInputStream(new FileInputStream(new File(realPath+"/codes.zip")));
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
            Cookie cookie = new Cookie("abcd", "123");
             cookie.setPath("/");
             response.addCookie(cookie);            // 设置response的Header
            response.setContentType("application/zip");// 指明response的返回对象是文件流
            response.setHeader("content-Disposition", "attachment;filename=codes.zip");// 设置在下载框默认显示的文件名            // 以流的形式下载文件。
            byte[] buffer = new byte[1024*8];  
            int read=0;            //如果没有数据了会返回-1;如果还有会返回数据的长度
            while ((read = fis.read(buffer))!=-1) {                //读取多少输出多少
                toClient.write(buffer,0,read);
            }          
             toClient.flush();
             toClient.close();
             fis.close();
             
         
        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();
        }
    }

 

public static void downLoadFile(HttpServletResponse response, String filePath) throws IOException {
        File file = new File(filePath);
        downLoadFile(response,file);
    }    public static void downLoadFile(HttpServletResponse response,File file) throws IOException {        if (file.exists()) {
            response.setContentType("application/force-download");
            response.setHeader("Content-Disposition", "attachment;filename=" + file.getName());            byte[] buffer = new byte[1024];            try (FileInputStream fis = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(fis)) {
                OutputStream os = response.getOutputStream();                int i = bis.read(buffer);                while (i != -1) {
                    os.write(buffer, 0, i);
                    i = bis.read(buffer);
                }
                fis.close();
                os.close();
            }
        }
    }    public static void downLoadFile(HttpServletResponse response,InputStream fis,String fileName) throws IOException {
        response.setContentType("application/force-download");
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);            byte[] buffer = new byte[1024];            try (
                 BufferedInputStream bis = new BufferedInputStream(fis)) {
                OutputStream os = response.getOutputStream();                int i = bis.read(buffer);                while (i != -1) {
                    os.write(buffer, 0, i);
                    i = bis.read(buffer);
                }
            }
        fis.close();
    }

 

这篇关于java下载文件工具类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!