当前位置: 首页 > 知识库问答 >
问题:

无法在spring boot中将字符串写入临时文件

封烨伟
2023-03-14

我正在创建临时文件(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个答案

司徒宏远
2023-03-14

使用BufferedWriter时,需要刷新并关闭写入程序。

您可以使用Java7中的try with参考资料。

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 ...
 类似资料:
  • 问题内容: 我将日志保存到sdcard上的.txt文件中,但是一旦保存了两行,它就会覆盖它并重新开始? 这是我的代码: 在恢复中挂载/ data后,/ sdcard和/ data / media / 0中的日志文件会显示完整的日志历史记录,但在设备开机时不会显示完整的日志历史记录 问题答案: 这是完成的方式。以下示例代码在单击提交按钮后将详细信息保存到文件中: 希望这可以帮助 :)

  • wef:使用apache poi写入xlsm(Excel 2007) 当我向文件中写入一个简单的字符串时,我无法打开该文件。错误-“Excel无法打开文件“Test1.xlsm”,因为文件格式或文件扩展名无效”

  • 编程相对较新。我想读取一个URL,修改文本字符串,然后将其写入以行分隔的csv文本文件。 阅读 但我无法将相同的字符串写入文件——它只会变成一行(请参阅下面的循环,尝试1) 我想我正在寻找一种方法,在FileWriter或BufferedWriter循环中,将字符串finalDataA转换为数组字符串(即包括字符串后缀[0]),但我还没有找到这样一种方法,不会给出类型“不能”的错误将String转

  • 问题内容: 我试图写一个给斯威夫特。使用Objective C以这种方式编写字符串通常可以将其作为NSData传递 这行不通 这产生了错误 “ NSData”不可转换为“ UnsafePointer” 用于将数据写入流的行。 您将如何在Swift中将字符串写入NSOutputStream? 问题答案: 这里有两个问题。首先是您要传递给(而不是)(就像您在Objective- C代码中传递的那样)。

  • 问题内容: 我认为能够将文本文件读入和写出字符串数组的能力是相当普遍的要求。从一种语言开始消除最初访问数据库的需求时,它也非常有用。Golang中是否存在? 例如 和 我宁愿使用现有的而不是重复的。 问题答案: 从Go1.1版本开始,有一个bufio.Scanner API可以轻松读取文件中的行。考虑上面的以下示例,该示例使用Scanner重写:

  • 问题内容: 我试图将比对的蛋白质序列输出到文件,但是,每次我尝试将字符串写入文件时,输出字符串都会被截断。我尝试写入的字符串长4603个字符,并以正确的字符数打印到控制台。我要附加的第一段代码与输出变量本身有关。我将在此处包括完整的字符串,因为对我而言,在写入文件时字符串被截断的方式是可以重现的。 使用此代码段,文件的输出应等于al1。但是,该文件的输出如下: 将这两个序列粘贴到文字处理器中并计算