ファイルの内容を書き換えたい。
私がこれまで考えてきたことはこれです:
これが最善の方法ですか?または、より直接的な方法、つまり、ファイルを削除して作成するのではなく、単にコンテンツを変更する必要がありますか?
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
File読み取り/書き込みを開く必要があります。
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");
最後にコンテンツを追加するだけの場合を除き、そのようにするのは合理的です。追加する場合は、追加コンストラクタで FileWriter を試してください。
少し良い順序は次のとおりです。
残念ながら、renameToは 保証されていません アトミックリネームを実行します。
必要に応じてOSがスペースを割り当てる余分なコストを回避するために、巨大な空のファイルを保持したい場合があります。これは通常、データベース、仮想マシン、およびバルクデータを処理して書き込むバッチプログラムで行われます。これにより、アプリケーションのパフォーマンスが大幅に向上します。このような場合、新しいファイルを作成して名前を変更しても、実際には役立ちません。代わりに、空のファイルを埋める必要があります。オーバーライドモードを使用する必要がある場合です。
GuavaFile.write 「バイト配列の内容でファイルを上書きする」:
Files.write(bytes, new File(path));
以下の例では、「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();