できない.dev

ファイルに書き込むには

テキストファイルへ書き込む基本形を各言語で示す。
上書きと追記の違い、文字化けを避けるエンコーディング指定までを扱う。

公開: 更新:

各言語見出しの横のバッジは検証状態を表す。実行確認済みはコードを実際に実行して確認したもの、静的確認は構文と公式 API ドキュメントで確認したものである。

Python 実行確認済み

with open("a.txt", "w", encoding="utf-8") as f:
    f.write("こんにちは\n")

with 文を使うと書き込み後にファイルが自動で閉じられ、バッファのフラッシュ漏れを防げる。
モード "w" は既存内容を上書きするため、末尾に足したいときは "a" を使う。

JavaScript 実行確認済み

import { writeFile } from "node:fs/promises";
await writeFile("a.txt", "こんにちは\n", "utf8");

Node.js の fs/promises を使う書き方で、ブラウザでは動かない。
writeFile は既存ファイルを上書きするため、追記したいときは appendFile を使う。

TypeScript 実行確認済み

import { writeFile } from "node:fs/promises";
await writeFile("a.txt", "こんにちは\n", "utf8");

書き方は JavaScript と同じで、引数や戻り値の型は @types/node が供給する。
戻り値は Promise<void> なので await で完了を待つ。

Go 静的確認

err := os.WriteFile("a.txt", []byte("こんにちは\n"), 0644)
if err != nil {
    log.Fatal(err)
}

os.WriteFile はファイルの作成・書き込み・クローズをまとめて行う。
第3引数はファイル作成時のパーミッションで、既存ファイルを上書きする場合は使われない。

Rust 静的確認

use std::fs;
fs::write("a.txt", "こんにちは\n")?;

fs::write はファイルを作成または切り詰めてから内容を書き込む。
? 演算子で Result のエラーを伝播するため、呼び出し元の戻り値を Result にしておく必要がある。

Java 静的確認

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
 
Files.writeString(Path.of("a.txt"), "こんにちは\n");                     // 上書き
Files.writeString(Path.of("a.txt"), "追記\n", StandardOpenOption.APPEND); // 追記

Files.writeString は Java 11 以降で使え、既定では UTF-8 で新規作成または上書きする。
末尾に足したいときは StandardOpenOption.APPEND を渡す。

C# 静的確認

using System.IO;
using System.Text;
 
File.WriteAllText("a.txt", "こんにちは\n", Encoding.UTF8);      // 上書き
File.AppendAllText("a.txt", "追記\n", Encoding.UTF8);           // 追記

File.WriteAllText はファイルの作成・書き込み・クローズをまとめて行い、既存ファイルは上書きする。
末尾に足したいときは File.AppendAllText を使い、文字化けを避けるためエンコーディングを明示する。

つまずき

書き込みが反映されない場合は、モード("w" と "a")の取り違えや、with / await でクローズや完了を待てていないことを疑う。
相対パスは実行時のカレントディレクトリを基準に解決される点にも注意する。

この記事は役立ちましたか?