できない.dev

ファイルを読み込むには

テキストファイルを読み込む基本形を各言語で示す。
文字化けを避けるエンコーディング指定までを扱う。

公開: 更新:

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

Python 実行確認済み

with open("a.txt", encoding="utf-8") as f:
    s = f.read()

with 文を使うとブロックを抜けた時点でファイルが自動的に閉じられ、クローズ漏れを防げる。
encoding は環境によって既定値が変わるため明示する。

うまくいかない時: Python で「UnicodeDecodeError」を解消できずファイルが読めない

JavaScript 実行確認済み

import { readFile } from "node:fs/promises";
const s = await readFile("a.txt", "utf8");

Node.js の fs/promises を使う書き方で、ブラウザでは動かない。
第2引数にエンコーディングを渡すと Buffer ではなく文字列が返る。

TypeScript 実行確認済み

import { readFile } from "node:fs/promises";
const s: string = await readFile("a.txt", "utf8");

書き方は JavaScript と同じで、戻り値に型注釈を付けられる点だけが異なる。

Go 静的確認

data, err := os.ReadFile("a.txt")
if err != nil {
    log.Fatal(err)
}
s := string(data)

os.ReadFile はファイル全体を一括で読み込み []byte を返す。
文字列として扱うときは string() で変換する。
巨大なファイルでは bufio.Scanner による逐次読み込みを検討する。

Rust 静的確認

use std::fs;
let s = fs::read_to_string("a.txt")?;

fs::read_to_string はファイル全体を String として読み込む。
? 演算子は Result のエラーを呼び出し元へ伝播するため、関数の戻り値を Result にしておく必要がある。

Java 静的確認

import java.nio.file.*;
String s = Files.readString(Path.of("a.txt"));

Files.readString は Java 11 以降で使え、ファイル全体を UTF-8 の String として読み込む。
それ以前のバージョンでは Files.readAllBytes と new String を組み合わせる。

C# 静的確認

using System.IO;
using System.Text;
 
string s = File.ReadAllText("a.txt", Encoding.UTF8);

File.ReadAllText はファイル全体を読み込んで文字列として返す。
エンコーディングを省略すると UTF-8 として扱われるが、意図を明示するために引数で渡しておくと環境差で迷わない。

つまずき

日本語ファイルが文字化けする場合は、まずエンコーディングの明示を疑う。
既定値が OS や実行環境で異なるため、utf-8 を明示するだけで解決することが多い。
詳細は各言語の「うまくいかない時」リンクを参照。

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