Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何高效地写入,而不经常创建新的文件对象?_Java_File_Io - Fatal编程技术网

Java 如何高效地写入,而不经常创建新的文件对象?

Java 如何高效地写入,而不经常创建新的文件对象?,java,file,io,Java,File,Io,我看到这个很棒 我有两个问题: 1) 如何修改当前正在阅读的文件内容 i、 我读了一行,根据算法结果修改它,然后我开始读下一行 2) 您将如何逐步写入文件 i、 我读了一行,根据算法结果在输出文件中写了一行,然后开始读下一行 我想用: private static void writeUsingFiles(String data) { try { Files.write(Paths.get("/Users/pankaj/files.txt"), data.

我看到这个很棒

我有两个问题:

1) 如何修改当前正在阅读的文件内容

i、 我读了一行,根据算法结果修改它,然后我开始读下一行

2) 您将如何逐步写入文件

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

我想用:

private static void writeUsingFiles(String data) {
        try {
            Files.write(Paths.get("/Users/pankaj/files.txt"), data.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
但后来我想如果这对很多人来说都是浪费

是否每次都创建新的文件对象

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

使用
BufferedWriter
BufferedReader
可通过适当的资源处理获得更好的性能

示例代码

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

我不知道如何修改您目前正在阅读的文件,一个想法是使用临时文件来完成,当读取到旧文件时,您可以更改它并保存到新文件中

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

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();
}
public static void writeFile1()引发IOException{
File fout=新文件(“out.txt”);
FileOutputStream fos=新的FileOutputStream(fout);
BufferedWriter bw=新的BufferedWriter(新的OutputStreamWriter(fos));
对于(int i=0;i<10;i++){
//使用你的算法
写(“某物”);
换行符();
}
bw.close();
}

Java 8对流式数据提供了更多的支持(即始终只在内存中保留少量大型数据集,并在数据流经过时对其进行处理)。自Java 7以来是否不再需要刷新和关闭?@Loki yes不需要。