java下载txt

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();
            }
        }
    }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值