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("文件格式异常");
        }

    }