第一种方式:保存到本地
package com.cnki.tool.base;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class ExportTxtUtil {
/**
* 导出
*
* @param file
* Txt文件(路径+文件名),Txt文件不存在会自动创建
* @param dataList
* 数据
* @return
*/
public static boolean exportTxt(File file, List<String> dataList) {
FileOutputStream out = null;
try {
out = new FileOutputStream(file);
return exportTxtByOS(out, dataList);
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
}
}
/**
* 导出
*
* @param out
* 输出流
* @param dataList
* 数据
* @return
*/
public static boolean exportTxtByOS(OutputStream out, List<String> dataList) {
boolean isSucess = false;
OutputStreamWriter osw = null;
BufferedWriter bw = null;
try {
osw = new OutputStreamWriter(out);
bw = new BufferedWriter(osw);
// 循环数据
for (int i = 0; i < dataList.size(); i++) {
bw.append(dataList.get(i)).append("\r\n");
}
isSucess = true;
} catch (Exception e) {
e.printStackTrace();
isSucess = false;
} finally {
if (bw != null) {
try {
bw.close();
bw = null;
} catch (IOException e) {
e.printStackTrace();
}
}
if (osw != null) {
try {
osw.close();
osw = null;
} catch (IOException e) {
e.printStackTrace();
}
}
if (out != null) {
try {
out.close();
out = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
return isSucess;
}
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("Hello,World!");
list.add("Hello,World!");
list.add("Hello,World!");
list.add("Hello,World!");
String filePath = "D:/txt/";
String fileName = java.util.UUID.randomUUID().toString().replaceAll("-", "")+".txt";
File pathFile = new File(filePath);
if(!pathFile.exists()){
pathFile.mkdir();
}
String relFilePath = filePath + File.separator + fileName;
File file = new File(relFilePath);
if(!file.exists()){
file.createNewFile();
}
boolean isSuccess=exportTxt(file,list);
System.out.println(isSuccess);
}
}
第二种方式浏览器直接下载:
/* 拼接字符串
* @author
* @param
* @return
*/
@RequestMapping("exportLog.do")
public void exportLog(HttpServletResponse response){
//获取日志
List<DtmSystemLog> list = logService.getLogs();
//拼接字符串
StringBuffer text = new StringBuffer();
for(DtmSystemLog log:list){
text.append(log.getOpeuser());
text.append("|");
text.append(log.getOpedesc());
text.append("|");
text.append(dateString);
text.append("\r\n");//换行字符
}
exportTxt(response,text.toString());
}
/* 导出txt文件
* @author
* @param response
* @param text 导出的字符串
* @return
*/
public void exportTxt(HttpServletResponse response,String text){
response.setCharacterEncoding("utf-8");
//设置响应的内容类型
response.setContentType("text/plain");
//设置文件的名称和格式
response.addHeader("Content-Disposition","attachment;filename="
+ genAttachmentFileName( "文件名称", "JSON_FOR_UCC_")//设置名称格式,没有这个中文名称无法显示
+ ".txt");
BufferedOutputStream buff = null;
ServletOutputStream outStr = null;
try {
outStr = response.getOutputStream();
buff = new BufferedOutputStream(outStr);
buff.write(text.getBytes("UTF-8"));
buff.flush();
buff.close();
} catch (Exception e) {
//LOGGER.error("导出文件文件出错:{}",e);
} finally {try {
buff.close();
outStr.close();
} catch (Exception e) {
//LOGGER.error("关闭流对象出错 e:{}",e);
}
}
}
//防止中文文件名显示出错
public String genAttachmentFileName(String cnName, String defaultName) {
try {
cnName = new String(cnName.getBytes("gb2312"), "ISO8859-1");
} catch (Exception e) {
cnName = defaultName;
}
return cnName;
}
远程调用浏览器下载txt文件方法:
import org.apache.commons.io.IOUtils;
@RequestMapping({"/demp/common/downloadDeviceLog.do"})
@ResponseBody
public void downloadDeviceLog(HttpServletRequest request, HttpServletResponse response) throws Exception {
String logUrl = "https://**/2018-11-20.txt";
try {
String [] logUrlArray = logUrl.split("/");
String fileName = logUrlArray[logUrlArray.length-1];
URL url = new URL (logUrl);
URLConnection uc = url.openConnection();
response.setContentType("application/octet-stream");//设置文件类型
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
response.setHeader("Content-Length", String.valueOf(uc.getContentLength()));
ServletOutputStream out = response.getOutputStream();
IOUtils.copy(uc.getInputStream(), out);
} catch (Exception e) {
e.printStackTrace();
}
}