[解決済み] Javaで既存のファイルにテキストを追加する方法は?
2022-03-14 13:08:30
質問
Javaで既存のファイルに繰り返しテキストを追加する必要があります。どうすればいいですか?
どのように解決するのですか?
ログを取る目的で行っているのですか? もしそうなら、次のようなものがあります。 このためのライブラリがいくつかあります。 . 最も人気のある2つは Log4j と ログバック .
Java 7+
ワンタイム・タスクの場合 ファイルクラス を使えば簡単にできます。
try {
Files.write(Paths.get("myfile.txt"), "the text".getBytes(), StandardOpenOption.APPEND);
}catch (IOException e) {
//exception handling left as an exercise for the reader
}
注意深く
: 上記のアプローチでは
NoSuchFileException
が存在しない場合、そのファイルを削除します。また、自動的に改行されることもありません(テキストファイルへの追加ではよくあることです)。別の方法として
CREATE
と
APPEND
オプションで、ファイルがまだ存在しない場合に最初に作成されます。
private void write(final String s) throws IOException {
Files.writeString(
Path.of(System.getProperty("java.io.tmpdir"), "filename.txt"),
s + System.lineSeparator(),
CREATE, APPEND
);
}
しかし、同じファイルに何度も書き込むような場合、上記のスニペットはディスク上のファイルを何度も開いたり閉じたりしなければならず、動作が遅くなります。この場合
BufferedWriter
の方が速いです。
try(FileWriter fw = new FileWriter("myfile.txt", true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw))
{
out.println("the text");
//more code
out.println("more text");
//more code
} catch (IOException e) {
//exception handling left as an exercise for the reader
}
注意事項
-
の2番目のパラメータは
FileWriter
コンストラクタは、新しいファイルを作成するのではなく、ファイルに追加するように指示します。(ファイルが存在しない場合は作成されます。) -
を使用すると
BufferedWriter
は、高価なライターを使用することをお勧めします(例えばFileWriter
). -
を使用することで
PrintWriter
にアクセスできるようになります。println
の構文に慣れているはずです。System.out
. -
しかし
BufferedWriter
とPrintWriter
のラッパーは厳密には必要ない。
古いJava
try {
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("myfile.txt", true)));
out.println("the text");
out.close();
} catch (IOException e) {
//exception handling left as an exercise for the reader
}
例外処理
古いJavaのために堅牢な例外処理が必要な場合、非常に冗長になります。
FileWriter fw = null;
BufferedWriter bw = null;
PrintWriter out = null;
try {
fw = new FileWriter("myfile.txt", true);
bw = new BufferedWriter(fw);
out = new PrintWriter(bw);
out.println("the text");
out.close();
} catch (IOException e) {
//exception handling left as an exercise for the reader
}
finally {
try {
if(out != null)
out.close();
} catch (IOException e) {
//exception handling left as an exercise for the reader
}
try {
if(bw != null)
bw.close();
} catch (IOException e) {
//exception handling left as an exercise for the reader
}
try {
if(fw != null)
fw.close();
} catch (IOException e) {
//exception handling left as an exercise for the reader
}
}
関連
-
スタイルが読み込まれず、ブラウザコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
-
[解決済み] ファイルを作成し、書き込むにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
java.util.NoSuchElementException 原因解析と解決方法
-
スタイルが読み込まれず、ブラウザコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
SpringBootApplication を型解決できない。
-
javaで非静的な解を静的な参照にすることができない
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
が 'X-Frame-Options' を 'deny' に設定しているため、フレーム内にある。
-
Javaエラーメッセージがenclosingクラスでない
-
テストが見つかりませんでした