这是用Java重写文件内容的最好方法吗?
我想重写一个文件的内容。
我到目前为止想到的是这样的:
- 保存文件名称
- 删除现有的文件
- 使用相同的名称创build一个新的空文件
- 将所需内容写入空文件
这是最好的方法吗? 还是有一个更直接的方法,就是不必删除和创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 。
稍好一点的顺序是:
- 生成新的文件名(例如foo.txt.new)
- 将更新的内容写入新文件。
- 做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));