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

时间:2017-10-09 10:46:12

标签: 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);
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");
    }
}

2 个答案:

答案 0 :(得分:3)

这里的问题是你试图在同一时间读取和写入同一个文件,这不起作用,你需要单独完成。

  1. 阅读您的文件。
  2. 更新每一行内容。
  3. 将更新的行保存到新的临时文件中。
  4. 保存此新临时文件,并在阅读完所有行后删除原始文件。
  5. 最后将临时文件重命名为原始文件名。
  6. 您可以查看 Modifying existing file content in Java ,了解有关如何实施的详细信息。

答案 1 :(得分:0)

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

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,我会手动复制/粘贴它。