如何有效地编写而不是经常创建新的文件对象?

时间:2014-08-20 12:59:42

标签: java file io

我看到了这个很棒的post on how to write to file in java

我有两个问题:

1)你如何修改你现在正在阅读的文件内容?

即。我读了一行,根据算法结果对其进行了修改,然后我开始阅读下一行。

2)你会如何逐步写入文件?

即。我读了一行,我根据算法结果在输出文件中写了一个新行,然后我开始阅读下一行。

我想用:

private static void writeUsingFiles(String data) {
        try {
            Files.write(Paths.get("/Users/pankaj/files.txt"), data.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

但后来我想如果这对许多写作来说是浪费?

每次都创建新的File对象吗?

2 个答案:

答案 0 :(得分:1)

  

我读了一行,我根据算法结果在输出文件中写了一个新行,然后我开始读下一行

使用BufferedWriterBufferedReader使用Java 7 The try-with-resources Statement,以便通过适当的资源处理获得更好的效果。

示例代码

String line = null;
try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
        BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
    while ((line = reader.readLine()) != null) { // read line
        String processedLine = getProcessedLine(line); // get processed line
        writer.write(processedLine); // writer the process line
        writer.newLine();  // writer new line if needed
    }
}

private String getProcessedLine(String line){...}

最后删除input.txt文件并将output.txt重命名为input.txt

答案 1 :(得分:1)

我现在不知道如何修改您正在阅读的文件,一个想法是使用临时文件来执行此操作,并且在将其读取到旧文件时,您可以更改它并保存在新的。

如果你想逐行编写它,同时运行一些算法,我认为你应该用这种方式:

public static void writeFile1() throws IOException {
    File fout = new File("out.txt");
    FileOutputStream fos = new FileOutputStream(fout);

    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));

    for (int i = 0; i < 10; i++) {
        // Use your algorithm
        bw.write("something");
        bw.newLine();
    }

    bw.close();
}