2011-08-14 30 views

回答

6

File.open("a.txt").each do |i| 
    puts i 
end 

感謝附:

File.open("some_file.txt") do |file| 
    puts file.read 
end 

open方法調用與塊一個文件實例,並清理文件引用一旦你的塊返回,關閉和沖洗FIL因此您的應用程序不會泄漏文件處理程序,這非常棒,因爲我們通常會忘記關閉文件,或者不考慮文件處理可能會產生異常。

當你做這樣的:

file = File.open("some_file.txt") 
puts file.read 

open方法使您文件實例,但現在你是負責清理殘局和關閉文件時,你不需要它了。所以,如果你這樣做,你應該將文件設置爲開始/救援塊,並添加一個確保子句,如果出現任何錯誤,請關閉該文件。

除非你有一個非常特殊的需求,你不應該使用這個第二個版本,第一個版本更簡單,更安全,你不必在意關閉/清理你對文件什麼的。

+0

您忘記關閉文件在你的第二個例子:d – fl00r

+0

是的,那就是意圖:d –

2

您一般可以在控制檯中輸入如此簡單的內容並立即獲得答案。

因此與內容的文件a.txt中:

one 
two 
three 

您的代碼將做到這一點:

[[email protected]]$ irb 
ruby-1.9.2-p180 :007 > File.open("a.txt") do |i| 
ruby-1.9.2-p180 :008 >  puts "a.txt:"+i.to_s 
ruby-1.9.2-p180 :009?> end 
a.txt:#<File:0x000001010e7ae8> 
=> nil 
ruby-1.9.2-p180 :010 > File.open("a.txt").each do |i| 
ruby-1.9.2-p180 :011 >  puts "a.txt:"+i.to_s 
ruby-1.9.2-p180 :012?> end 
a.txt:one 
a.txt:two 
a.txt:three 
=> #<File:a.txt> 

所以第一個打印文件對象引用/地址。

通過文件中的行並打印每一個的第二一個迭代。

希望幫助