Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Ruby辞典

  1. トップページ
  2. Ruby辞典
  3. File.exist? / directory? / basename / dirname / extname

File.exist? / directory? / basename / dirname / extname

ファイルの存在確認やパスの分解を行うメソッドです。ファイル操作の前処理として頻繁に使用します。

構文
# ファイルが存在するか確認します。
File.exist?("パス")

# ディレクトリかどうか確認します。
File.directory?("パス")

# ファイルかどうか確認します。
File.file?("パス")

# パスからファイル名を取得します。
File.basename("パス")
File.basename("パス", "拡張子")  # 拡張子を除いたファイル名

# パスからディレクトリ部分を取得します。
File.dirname("パス")

# パスから拡張子を取得します。
File.extname("パス")
メソッド一覧
メソッド概要
File.exist?ファイルまたはディレクトリが存在すれば『true』を返します。
File.file?パスが通常のファイルであれば『true』を返します。
File.directory?パスがディレクトリであれば『true』を返します。
File.basenameパスの最後の要素(ファイル名)を返します。
File.dirnameパスのディレクトリ部分を返します。
File.extnameファイルの拡張子(ドットを含む)を返します。
File.join引数をOSのパス区切り文字で結合します。
サンプルコード
パス = "/home/user/documents/report.txt"

# パスを分解します。
puts File.basename(パス)          # report.txt
puts File.basename(パス, ".txt")  # report(拡張子を除く)
puts File.dirname(パス)           # /home/user/documents
puts File.extname(パス)           # .txt

# ファイルの存在を確認してから処理します。
ファイル名 = "sample.txt"
if File.exist?(ファイル名)
  puts "ファイルが存在します。"
  if File.file?(ファイル名)
    puts "通常のファイルです。"
  end
else
  puts "ファイルが存在しません。"
end

# File.join でパスを安全に結合します。
ディレクトリ = "/home/user"
ファイル = "data.csv"
フルパス = File.join(ディレクトリ, "documents", ファイル)
puts フルパス  # /home/user/documents/data.csv

# 拡張子で処理を分岐します。
ファイル一覧 = ["image.png", "doc.txt", "script.rb", "data.csv"]
ファイル一覧.each do |f|
  puts "#{f}: #{File.extname(f)}"
end
概要

『File』クラスのクラスメソッドはファイルパスの操作に特化しています。実際のファイルを開かずにパスの情報だけを取得できるため、処理の前チェックに便利です。

パスの結合には文字列連結ではなく『File.join』を使うことをお勧めします。WindowsとUnix系でパス区切り文字が異なりますが、『File.join』を使うと環境によらず正しいパスが生成されます。『File.exist?』は旧来の『File.exists?』(Ruby 3.2で削除)の代わりに使用してください。

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