Java 迭代文件中的行,并在每行末尾添加null值

Java 迭代文件中的行,并在每行末尾添加null值,java,file,io,file-handling,Java,File,Io,File Handling,我试图在文件的每一行末尾添加一个关键字null(更具体地说是,null)。我尝试了下面提到的代码,但对文件没有影响。 注意:TESTFILE是一个有10行的现有文件,我必须在每行末尾追加,null final String FILENAME = "D:\\TESTFILE" FileWriter fileWriter = new FileWriter(FILENAME, true); BufferedWriter bw = new BufferedWriter(fileWriter); Fil

我试图在文件的每一行末尾添加一个关键字
null
(更具体地说是
,null
)。我尝试了下面提到的代码,但对文件没有影响。 注意:
TESTFILE
是一个有10行的现有文件,我必须在每行末尾追加
,null

final String FILENAME = "D:\\TESTFILE"
FileWriter fileWriter = new FileWriter(FILENAME, true);
BufferedWriter bw =  new BufferedWriter(fileWriter);
FileReader fileReader = new FileReader(FILENAME);
BufferedReader br = new BufferedReader(fileReader);
PrintWriter printWriter =  new PrintWriter(bw);
String line;

while ((line = br.readLine()) != null) {
        printWriter.println(",null");
    }
}

这里的问题是,您试图在同一时间读取和写入同一个文件,这将不起作用,您需要单独执行此操作

  • 阅读你的文件
  • 更新每行内容
  • 将更新的行保存到新的临时文件中
  • 保存此新临时文件,并在读取所有行后删除原始文件
  • 最后将临时文件重命名为原始文件名

  • 您可以查看了解如何实现它的更多详细信息。

    如另一个答案中所述,请确保从一个文件读取,然后写入另一个文件。这始终是一个好主意,因为你不会在犯小错误时丢失原件。当然,您也可以在完成后删除备份文件,这取决于您

    import java.io.IOException;
    import java.io.PrintWriter;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.nio.file.StandardCopyOption;
    import java.nio.file.StandardOpenOption;
    
    public class Modify {
        public void modify(Path file, String append) throws IOException {
            Path backup = file.resolveSibling(file.getFileName().toString() + "~");
            Files.move(file, backup, StandardCopyOption.REPLACE_EXISTING);
    
            try (PrintWriter writer = new PrintWriter(Files.newBufferedWriter(file, StandardOpenOption.CREATE))) {
                Files.lines(backup)
                    .map(l -> l.concat(append))
                    .forEach(writer::println);
            }
        }
    
        public static void main(String... args) throws IOException { 
            new Modify().modify(Paths.get("/path/to/whatever"), ",null");
        }
    }
    

    但是,老实说,在一个10行文件中添加
    ,null
    ,我会手动复制/粘贴它;不能同时读取和写入同一文件。在写入文件之前完全读入该文件,或者写入另一个(临时)文件,删除原始文件并在写入后重命名副本。