Вы можете прочитать файл сразу:
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 .