java下载txt

来源:互联网 发布:c语言每行输出5个 编辑:程序博客网 时间:2024/04/26 13:23
package com.fh.util;import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import javax.servlet.http.HttpServletRequest;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;public class TxtUtils {    //读取txt编码格式    private static String getCharset(String fileName) throws IOException{          HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();                BufferedInputStream bin = new BufferedInputStream(new FileInputStream(request.getSession().getServletContext().getRealPath(fileName)));            int p = (bin.read() << 8) + bin.read();                      String code = null;                      switch (p) {                case 0xefbb:                    code = "UTF-8";                    break;                case 0xfffe:                    code = "Unicode";                    break;                case 0xfeff:                    code = "UTF-16BE";                    break;                default:                    code = "GBK";            }            return code;      }      /**     * 功能:Java读取txt文件的内容     * 步骤:1:先获得文件句柄     * 2:获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取     * 3:读取到输入流后,需要读取生成字节流     * 4:一行一行的输出。readline()。     * 备注:需要考虑的是异常情况     * @param filePath     */    public static String readTxtFile(String filePath){        HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();          try {            String encoding = getCharset(filePath);            File file = new File(request.getSession().getServletContext().getRealPath(filePath));            if(file.isFile() && file.exists()){//判断文件是否存在                InputStreamReader read = new InputStreamReader(                        new FileInputStream(file),encoding);//考虑到编码格式                BufferedReader br = new BufferedReader(read);                String lineTxt = null;                List<String> lineTxtArray = new ArrayList<String>();                while((lineTxt = br.readLine())!= null){                    System.out.println(lineTxt);                    lineTxtArray.add(lineTxt);                }                read.close();                String lineTxts = "";                for (int i = 0; i < lineTxtArray.size(); i++) {                    if(i != lineTxtArray.size() - 1){                        lineTxts += lineTxtArray.get(i) + "\r\n";                    }else{                        lineTxts += lineTxtArray.get(i) ;                    }                }                return lineTxts;            }else{                System.out.println("找不到指定的文件");            }        } catch (Exception e) {            System.out.println("读取文件内容出错");            e.printStackTrace();        }        return null;    }}
//控制层    /**     * 下载txt     * @param response     * @throws IOException     */    @RequestMapping(value = "/download")    public void download(HttpServletResponse response,String filePath ) throws IOException{        //用result来保存txt文档的内容,具体内容请自己写读取流操作        byte[] result =TxtUtils.readTxtFile(filePath).getBytes();        OutputStream os = response.getOutputStream();        try {            response.reset();            response.setHeader("Content-Disposition", "attachment; filename=" + new Date().getTime() + ".txt");            response.setContentType("text/plain;charset=utf-8");            os.write(result);            os.flush();        } catch (IOException e) {            e.printStackTrace();        } finally {            if (os != null) {                os.close();            }        }    }

0 0