46

ファイルの内容を書き換えたい。

これまでに私が考えたことは次のとおりです。

  1. ファイル名を保存
  2. 既存のファイルを削除する
  3. 同じ名前で新しい空のファイルを作成します
  4. 目的のコンテンツを空のファイルに書き込みます

これが最善の方法ですか?または、より直接的な方法、つまり、ファイルを削除して作成する必要がなく、単にコンテンツを変更する方法はありますか?

4

8 に答える 8

92

ファイル foo.log を FileOutputStream で上書きするには:

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();
于 2009-06-19T03:59:01.733 に答える
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);

詳細については、http: //commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.htmlを参照してください。

于 2009-06-19T04:34:38.610 に答える
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");
于 2009-06-19T04:00:01.953 に答える
2

最後にコンテンツを追加するだけでない限り、そのようにするのが合理的です。追加する場合は、追加コンストラクターでFileWriterを試してください。

少し良い順序は次のとおりです。

  1. 新しいファイル名を生成します (例: foo.txt.new)
  2. 更新されたコンテンツを新しいファイルに書き込みます。
  3. foo.txt.new から foo.txt へのアトミックな名前変更を行います

残念ながら、renameTo はアトミックな名前変更を行うことが保証されていません

于 2009-06-19T03:59:04.760 に答える
1

必要に応じてOSがスペースを割り当てる余分なコストを回避するために、巨大な空のファイルを保持したい場合があります。これは通常、データベース、仮想マシン、およびバルクデータを処理および書き込むバッチプログラムで実行されます。これにより、アプリケーションのパフォーマンスが大幅に向上します。このような場合、新しいファイルを書き込んで名前を変更しても、実際には役に立ちません。代わりに、空のファイルを埋める必要があります。それは、オーバーライドモードに行かなければならないときです。

于 2010-07-20T13:53:06.900 に答える
1

以下の例では、「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(); 
于 2009-06-19T04:00:06.960 に答える