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