คุณสามารถอ่านไฟล์ทั้งหมดในครั้งเดียว:
content = File.readlines 'file.txt'
content.each_with_index{|line, i| puts "#{i+1}: #{line}"}
เมื่อไฟล์มีขนาดใหญ่หรืออาจมีขนาดใหญ่ก็มักจะดีกว่าในการประมวลผลทีละบรรทัด:
File.foreach( 'file.txt' ) do |line|
puts line
end
บางครั้งคุณต้องการเข้าถึงตัวจัดการไฟล์หรือควบคุมการอ่านด้วยตนเอง:
File.open( 'file.txt' ) do |f|
loop do
break if not line = f.gets
puts "#{f.lineno}: #{line}"
end
end
ในกรณีของไฟล์ไบนารีคุณอาจระบุตัวคั่น nil และขนาดบล็อกเช่น:
File.open('file.bin', 'rb') do |f|
loop do
break if not buf = f.gets(nil, 80)
puts buf.unpack('H*')
end
end
ในที่สุดคุณสามารถทำได้โดยไม่มีบล็อกตัวอย่างเช่นเมื่อประมวลผลหลายไฟล์พร้อมกัน ในกรณีนั้นไฟล์จะต้องปิดอย่างชัดเจน (ปรับปรุงตามความคิดเห็นของ @antinome):
begin
f = File.open 'file.txt'
while line = f.gets
puts line
end
ensure
f.close
end
อ้างอิง: ไฟล์ APIและIO API