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

Ank*_*kur 44 java file-io rewrite

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

到目前为止我所想到的是:

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

这是最好的方法吗?或者是否有更直接的方式,即不必删除和创建文件,只需更改内容?

Sto*_*bor 81

使用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();
Run Code Online (Sandbox Code Playgroud)

或者使用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();
Run Code Online (Sandbox Code Playgroud)

  • @Stobor如果之前的内容大于新内容,是删除了多余的内容,还是在文件结尾后找到它,而不是应该删除的内容. (3认同)
  • 如果我们没有指定任何值,它将是false并且它将覆盖旧文件 (3认同)

jnt*_*t30 12

我强烈建议使用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);
Run Code Online (Sandbox Code Playgroud)

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


drf*_*oob 5

请参阅: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");
Run Code Online (Sandbox Code Playgroud)