这是用Java重写文件内容的最好方法吗?

我想重写一个文件的内容。

我到目前为止想到的是这样的:

  1. 保存文件名称
  2. 删除现有的文件
  3. 使用相同的名称创build一个新的空文件
  4. 将所需内容写入空文件

这是最好的方法吗? 还是有一个更直接的方法,就是不必删除和创build文件,而只是简单地改变内容?

用FileOutputStream覆盖文件foo.log:

File myFoo = new File("foo.log"); FileOutputStream fooStream = new FileOutputStream(myFoo, false); // true to append // false to overwrite. byte[] myBytes = "New Contents\n".getBytes(); fooStream.write(myBytes); fooStream.close(); 

或使用FileWriter:

 File myFoo = new File("foo.log"); FileWriter fooWriter = new FileWriter(myFoo, false); // true to append // false to overwrite. fooWriter.write("New Contents\n"); fooWriter.close(); 

我强烈推荐使用Apache Common的FileUtil。 我发现这个软件包是非常宝贵的。 它很容易使用,同样重要的是,当你稍后再回来时,很容易阅读/理解。

 //Create some files here File sourceFile = new File("pathToYourFile"); File fileToCopy = new File("copyPath"); //Sample content org.apache.commons.io.FileUtils.writeStringToFile(sourceFile, "Sample content"); //Now copy from source to copy, the delete source. org.apache.commons.io.FileUtils.copyFile(sourceFile, fileToCopy); org.apache.commons.io.FileUtils.deleteQuietly(sourceFile); 

有关更多信息,请访问: http : //commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html

请参阅: java.io.RandomAccessFile

你会想打开一个文件读写,所以:

 RandomAccessFile raf = new RandomAccessFile("filename.txt", "rw"); String tmp; while (tmp = raf.readLine() != null) { // Store String data } // do some string conversion raf.seek(0); raf.writeChars("newString"); 

除非你只是在最后添加内容,否则这样做是合理的。 如果正在追加,请使用append构造函数尝试FileWriter 。

稍好一点的顺序是:

  1. 生成新的文件名(例如foo.txt.new)
  2. 将更新的内容写入新文件。
  3. 做primefaces从foo.txt.new重命名为foo.txt

不幸的是,renameTo 不保证做primefaces重命名。

在下面的例子中,“false”会导致文件被覆盖,true会导致相反的结果。

 File file=new File("C:\Path\to\file.txt"); DataOutputStream outstream= new DataOutputStream(new FileOutputStream(file,false)); String body = "new content"; outstream.write(body.getBytes()); outstream.close(); 

有时候可能需要保留一个巨大的空文件,以避免操作系统在需要的基础上分配空间的额外成本。 这通常由数据库,虚拟机以及处理和写入批量数据的批处理程序完成。 这将显着提高应用程序的性能。 在这些情况下,编写一个新文件并重新命名将不会有帮助。 相反,空文件将不得不被填满。 这是当一个必须去覆盖模式。

Guava File.write “用字节数组的内容覆盖文件”:

 Files.write(bytes, new File(path));