Ruby I/O是與系統(tǒng)交互的一種方式。 數(shù)據(jù)以字節(jié)/字符的形式發(fā)送。 IO類是Ruby中所有輸入和輸出的基礎。它可以是雙工的,因此可使用多個本機操作系統(tǒng)流。
IO類有一個叫作File類的子類,允許在Ruby中讀取和寫入文件。 這兩個類是密切相關的。 IO對象表示對鍵盤和屏幕的可讀/可寫交互。
IO控制臺提供了與控制臺交互的不同方法。IO類提供以下基本方法:
IO::consoleIO#raw#raw!IO#cookedIO#cooked!IO#getchIO#echo=IO#echo?IO#noechoIO#winsizeIO#winsize=IO#iflushIO#ioflushIO#oflush可以使用不同的讀取,寫入或讀寫方法創(chuàng)建Ruby文件。
在Ruby中打開文件有兩種方法:
兩種方法之間的區(qū)別是:File.open方法可以與一個塊相關聯(lián),而File.new方法不能。
語法
f = File.new("fileName.rb")
或者 -
File.open("fileName.rb", "mode") do |f|
創(chuàng)建文件的示例
使用File.open方法在Ruby中創(chuàng)建一個文件,以便從文件讀取或?qū)懭霐?shù)據(jù)。
步驟1) 在文件file-create.rb中,編寫代碼以創(chuàng)建新文件,如下所示。
#!/usr/bin/ruby
# file : file-create.rb
puts 'Start to create file ...'
File.open('create-first-file.txt', 'w') do |f|
f.puts "This is Yiibai Website"
f.write "You are reading Ruby tutorial.\n"
f << "Please visit our website.\n"
end
puts 'End create file.'
步驟2)在控制臺中鍵入以下命令以創(chuàng)建的文件。
F:\worksp\ruby>ruby file-create.rb
Start to create file ...
End create file.
F:\worksp\ruby>
創(chuàng)建新文件:create-first-file.txt可在代碼目錄下找到。
讀取文件有三種不同的方法。要返回一行,使用以下語法。
語法:
f.gets
code...
要在當前位置之后返回整個文件,使用以下語法。
語法
f.read
code...
要以文件行的形式返回文件,使用以下語法。
語法
f.readlines
[code...]
讀取文件的示例
使用File.open方法在Ruby中創(chuàng)建一個文件,以便從文件讀取或?qū)懭霐?shù)據(jù)。
步驟1)在文件 file-read.rb 中,編寫代碼以讀取已存在的文件,如下所示。
#!/usr/bin/ruby
# file : file-read.rb
while line = gets
puts line
end
步驟2)在控制臺中輸入以下命令以讀取文件。
F:\worksp\ruby>ruby file-read.rb create-first-file.txt
This is Yiibai Website
You are reading Ruby tutorial.
Please visit our website.
F:\worksp\ruby>
關于文件:create-first-file.txt 的內(nèi)容顯示在控制臺中。
sysread 方法
sysread方法也用于讀取文件的內(nèi)容。使用此方法可以以任何模式打開文件。
示例:
在文件:file-sysread.rb中,編寫代碼以讀取已存在的文件,如下所示。
#!/usr/bin/ruby
aFile = File.new("create-first-file.txt", "r")
if aFile
content = aFile.sysread(30)
puts content
else
puts "Unable to open file!"
end
執(zhí)行上面代碼,輸出結果如下 -
F:\worksp\ruby>ruby file-sysread.rb
This is Yiibai Website
You ar
F:\worksp\ruby>
參數(shù)30表示將從文件打印30個字符。
借助于syswrite方法,可以將內(nèi)容寫入文件。 需要在此方法的寫入模式下打開文件。
新內(nèi)容將覆蓋已經(jīng)存在的文件中的舊內(nèi)容。
示例
#!/usr/bin/ruby
# file : file-syswrite.rb
aFile = File.new("about.txt", "r+")
if aFile
aFile.syswrite("New content is written in this file.\n Yes, do...while write \n我亂寫一片.")
end
puts 'write to file: about.txt success. '
執(zhí)行上面代碼,得到以下輸出結果 -
F:\worksp\ruby>ruby file-syswrite.rb
write to file: about.txt success.
F:\worksp\ruby>
使用rename方法重命名Ruby文件,并使用delete方法進行刪除。
要重命名文件,使用以下語法。
File.rename("olderName", "newName.txt")
``
**實例**
```ruby
#!/usr/bin/ruby
# file : file-rename.rb
File.rename("about.txt", "about.new.txt")
puts 'rename file => about.txt to about.new.txt'
執(zhí)行上面代碼,得到以下輸出結果 -
F:\worksp\ruby>ruby file-rename.rb
rename file => about.txt to about.new.txt
F:\worksp\ruby>
在上面的輸出中,about.txt文件不再存在,因為它的名稱已被更改為about.new.txt文件。
要刪除文件,使用以下語法。
File.delete("filename.txt")
示例
#!/usr/bin/ruby
File.delete("new.txt")
在上述輸出中,new.txt文件不再存在,因為它已被刪除。