无法在春季启动时将字符串写入临时文件

时间:2021-07-05 08:59:48

标签: java spring spring-boot

我正在创建临时文件(outputFile)并使用 BufferedWriter 写入文本。我没有例外。但是没有附加字符串。我也将 sysout 用于输出文件,但它没有打印任何内容。

File outputFile = File.createTempFile("abc",".tmp");
        ArrayList<LoadDirectoryResponse> dirlist = new ArrayList<LoadDirectoryResponse>();
        ArrayList<LoadDirectoryResponse> dirlistReq = new ArrayList<LoadDirectoryResponse>();
        
        filenames = filenames.substring(0, filenames.length()-1);
        String[] finalFileName = filenames.split(",");
        dirlistReq = DataQuestService.mapLoadDirectoryList(lines,keyword,finalFileName);
        for(MultipartFile multifile : files)
        {
            String fileName = multifile.getOriginalFilename();
            String prefix = fileName.substring(fileName.lastIndexOf("."));
            File file = null;
                 file = File.createTempFile(fileName, prefix);
                 multifile.transferTo(file);
                 for(LoadDirectoryResponse obj: dirlistReq )
                    {
                     if(fileName.equals(obj.getFilename()))
                     {
                         LoadDirectoryResponse objRes = new LoadDirectoryResponse(obj.getFilename(),obj.getKeyWord(),obj.getLinesToBeCopied(),obj.isChecked());
                         Scanner sc = new Scanner(file);
                         if(obj.isChecked()) {
                        BufferedWriter br = new BufferedWriter(new FileWriter(outputFile));
                        ArrayList<String> linesToBeAdd = new ArrayList<String>();
                         int i = 0;
                         while (sc.hasNextLine()) {
                             String line = sc.nextLine();
                             linesToBeAdd.add(line);
                             if(line.contains(obj.getKeyWord()))
                             {
                                 
                                 String value  = DataQuestService.getLinesToBeAdd(i,linesToBeAdd,lines);
                                 br.write(value);
                                 break;
                             }
                             else
                             {
                                 objRes.setStatus("Not Found");
                             }
                          }
                         }
                         dirlist.add(objRes);
                     } 
                     
            }
               
                 
        }   
Scanner sc1 = new Scanner(outputFile);
        while(sc1.hasNextLine())
        {
            System.out.println(sc1.nextLine());
        }
        return ResponseEntity.ok()
                   .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + outputFile.getName() + "\"")
                   .body(outputFile);
    }

请帮忙解决这个问题

提前致谢

1 个答案:

答案 0 :(得分:0)

使用 BufferedWriter 时,您需要刷新并关闭编写器。

您可以在 Java7+ 中使用 try-with-resources。

try (BufferedWriter br = new BufferedWriter(new FileWriter(outputFile))) {
    // write something...
}

在这种情况下,我建议将 BufferedWriter 移到外面。因为你只是将很多文件输出到临时文件中。

// Your code ...
dirlistReq = DataQuestService.mapLoadDirectoryList(lines,keyword,finalFileName);
try (BufferedWriter br = new BufferedWriter(new FileWriter(outputFile))) {
    for(MultipartFile multifile : files) {
        String fileName = multifile.getOriginalFilename();
        // Your code ...
    }
}

// Your code ...