Puoi leggere il file tutto in una volta:
content = File.readlines 'file.txt'
content.each_with_index{|line, i| puts "#{i+1}: #{line}"}
Quando il file è grande o può essere grande, di solito è meglio elaborarlo riga per riga:
File.foreach( 'file.txt' ) do |line|
puts line
end
A volte vuoi accedere all'handle del file o controllare tu stesso le letture:
File.open( 'file.txt' ) do |f|
loop do
break if not line = f.gets
puts "#{f.lineno}: #{line}"
end
end
Nel caso di file binari, è possibile specificare un separatore zero e una dimensione di blocco, in questo modo:
File.open('file.bin', 'rb') do |f|
loop do
break if not buf = f.gets(nil, 80)
puts buf.unpack('H*')
end
end
Finalmente puoi farlo senza un blocco, ad esempio quando elabori più file contemporaneamente. In tal caso il file deve essere esplicitamente chiuso (migliorato come da commento di @antinome):
begin
f = File.open 'file.txt'
while line = f.gets
puts line
end
ensure
f.close
end
Riferimenti: File API e IO API .