言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Ruby辞典

  1. トップページ
  2. Ruby辞典
  3. File.read / write / open

File.read / write / open

対応: Ruby 1.8(2003)

ファイルの読み書きを行うメソッドです。『File.read』で全文を読み込み、『File.write』で書き込みができます。

構文

# ファイルの内容をすべて文字列で読み込みます。
content = File.read("ファイルパス")
content = File.read("ファイルパス", encoding: "UTF-8")

# ファイルに文字列を書き込みます(既存の内容は上書き)。
File.write("ファイルパス", content)

# ファイルを開いてブロック内で操作します(自動でクローズ)。
File.open("ファイルパス", "モード") do |f|
  # ファイル操作
end

# 行ごとに読み込みます。
File.foreach("ファイルパス") { |line| 処理 }

オープンモード一覧

モード概要
"r"読み込み専用で開きます(デフォルト)。ファイルが存在しない場合はエラーになります。
"w"書き込み専用で開きます。ファイルが存在する場合は内容を削除します。
"a"追記モードで開きます。ファイルの末尾に内容を追加します。
"r+"読み書き両用で開きます。ファイルが存在しない場合はエラーになります。
"w+"読み書き両用で開きます。ファイルが存在する場合は内容を削除します。

サンプルコード

sample_file_read_write_open.rb
# ファイルに書き込みます。
File.write("sample.txt", "こんにちは、Ruby!\n1行目のテキストです。\n")
puts "書き込み完了"

# ファイルの内容を読み込みます。
content = File.read("sample.txt")
puts content

# File.open でブロックを使って安全に操作します。
File.open("log.txt", "a") do |f|
  f.puts "#{Time.now}: ログを追記しました。"
end

# 行ごとに読み込んで処理します。
File.open("sample.txt", "r") do |f|
  f.each_line.with_index(1) do |line, num|
    puts "#{num}行目: #{line.chomp}"
  end
end

# foreach で行ごとに処理します(ブロックなしで列挙子を返す)。
line_count = File.foreach("sample.txt").count
puts "行数: #{line_count}"
ruby file_read_write_open.rb
書き込み完了
こんにちは、Ruby!
1行目のテキストです。
1行目: こんにちは、Ruby!
2行目: 1行目のテキストです。
行数: 2

概要

Rubyのファイル操作は『File』クラスを通じて行います。小さなファイルなら『File.read』・『File.write』が最も簡潔です。ブロック付きの『File.open』は処理が終わると自動的にファイルをクローズするため、ファイルの閉じ忘れを防げます。

ブロックなしで『File.open』を使った場合、必ず『close』を呼び出す必要があります。ファイルを閉じないとリソースが解放されず、大量のファイルを扱う場合に問題が発生します。大きなファイルを一括で読み込む際はメモリ消費が増えるため、『foreach』で行ごとに処理することを検討してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。