Java接口后台生成临时文件到指定目录,并下载该文件
由于工作需要实现一个把线上数据同步到线下内网里,两个系统是几乎一样的,所以想出来这样一个导入导出的方案,就是用户页面点击导出然后把某一时间段数据导出成文件,然后再到另一个环境点击导入,来实现数据同步的方案,当然这个需要自己去解决数据冲突,就不在此介绍了,废话不多说代码如下
数据导出
@RequestMapping("/download")
public void download(HttpServletRequest request, HttpServletResponse response) throws Exception {
String savePath = request.getServletContext().getRealPath("/WEB-INF/tmp");
logger.debug("获取到的/WEB-INF/tmp 路径=== " + savePath);
File tmpDir = new File(savePath);
// 判断上传文件的保存目录是否存在
if (!tmpDir.exists() && !tmpDir.isDirectory()){
tmpDir.createNewFile();
logger.debug(savePath + "目录不存在,需要创建。");
// 创建目录
tmpDir.mkdir();
}
String fileWriteTime = "offline"+ DateUtils.dateToString(new Date(),"yyyy-MM-dd");
String tmpFileName = savePath + "\\" + fileWriteTime + ".data";
logger.debug("临时文件名:===" + tmpFileName);
File file = new File(tmpFileName);
// 判断上传文件的保存目录是否存在
if (!file.exists()){
file.createNewFile();
logger.debug("临时文件创建不成功。");
}
//此处true开启续写,false覆盖
FileWriter fileWriter = new FileWriter(file, false);
// 流的方式
BufferedWriter bufferWriter = new BufferedWriter(fileWriter);
//写入文件内容
bufferWriter.write("大大大小小小"+"\n");
bufferWriter.write("大大大小小小222");
bufferWriter.close();
fileWriter.close();
// 返回前端下载文件
File writeName = new File(tmpFileName);
String fileName = writeName.getName();
fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
BufferedInputStream br = new BufferedInputStream(new FileInputStream(writeName));
byte[] buf = new byte[1024];
int len = 0;
response.reset();
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
OutputStream out = response.getOutputStream();
while ((len = br.read(buf)) > 0)
out.write(buf, 0, len);
br.close();
out.close();
}
下面是导入接口
@RequestMapping("/uploadData")
public void uploadData(HttpServletRequest request, HttpServletResponse response,@RequestParam("dataFiles") MultipartFile dataFiles) throws Exception {
if (dataFiles.getOriginalFilename().toUpperCase().endsWith("DATA")){
try (
InputStream inputStream = dataFiles.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader br = new BufferedReader(inputStreamReader);
){
String line;
while ((line = br.readLine()) != null) {
// 一次读入一行数据
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}else{
logger.info("文件格式异常");
}
}