Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
os.ReadFile() / WriteFile()
ファイルの内容を一度に読み書きするための便利関数です。Go 1.16以降では『os.ReadFile()』と『os.WriteFile()』が標準で使えます。
構文
// ファイルを丸ごと読み込む([]byte を返す)
data, err := os.ReadFile("ファイルパス")
// []byte をファイルに書き込む(ファイルがなければ作成)
err := os.WriteFile("ファイルパス", データ, 0644)
関数一覧
| 関数 | 概要 |
|---|---|
| os.ReadFile(name) | ファイルの全内容を読み込み、バイトスライスで返します。Go 1.16以降で使用できます。 |
| os.WriteFile(name, data, perm) | バイトスライスをファイルに書き込みます。ファイルが存在しなければ指定パーミッションで作成します。 |
| string(data) | バイトスライスを文字列に変換します。読み込んだ内容をテキストとして扱う際に使います。 |
サンプルコード
package main
import (
"fmt"
"os"
"strings"
)
func main() {
// テキストをファイルに書き込む
content := "Go言語の学習メモ\nファイル操作は簡単です\n"
err := os.WriteFile("memo.txt", []byte(content), 0644)
if err != nil {
fmt.Println("書き込みエラー:", err)
return
}
fmt.Println("memo.txt を書き込みました")
// ファイルを丸ごと読み込む
data, err := os.ReadFile("memo.txt")
if err != nil {
fmt.Println("読み込みエラー:", err)
return
}
// バイトスライスを文字列に変換して表示
text := string(data)
fmt.Println("--- ファイルの内容 ---")
fmt.Print(text)
// 読み込んだ内容を加工して上書き保存
upper := strings.ToUpper(text)
os.WriteFile("memo.txt", []byte(upper), 0644)
fmt.Println("内容を大文字に変換して上書きしました")
// 後始末
os.Remove("memo.txt")
}
概要
『os.ReadFile()』と『os.WriteFile()』はファイルの開閉処理を内部で自動的に行うため、コードが非常に簡潔になります。設定ファイルやテキストファイルを扱う場合に最もシンプルな選択肢です。
大きなファイルを扱う場合は全内容をメモリに読み込むため、メモリ使用量に注意してください。数百MB以上のファイルを処理する場合は『bufio』を使ってストリーム処理するのが適切です。パーミッション『0644』は「オーナーが読み書き可、その他は読み取りのみ」を意味します。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。