4 回答
TA贡献1804条经验 获得超3个赞
File.open("my/file/path", "r") do |f|
f.each_line do |line|
puts line
end
end
# File is closed automatically at end of block
也可以在上述之后显式关闭文件(传递一个块open为您关闭文件):
f = File.open("my/file/path", "r")
f.each_line do |line|
puts line
end
f.close
TA贡献1802条经验 获得超5个赞
您可以一次读取所有文件:
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-separator和块大小,如下所示:
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
参考:File API和IO API。
- 4 回答
- 0 关注
- 922 浏览
添加回答
举报