Ruby檔案I/O


Ruby I/O是與系統互動的一種方式。 資料以位元組/字元的形式傳送。 IO類是Ruby中所有輸入和輸出的基礎。它可以是雙工的,因此可使用多個本機作業系統流。

IO類有一個叫作File類的子類,允許在Ruby中讀取和寫入檔案。 這兩個類是密切相關的。 IO物件表示對鍵盤和螢幕的可讀/可寫互動。

I/O埠中的常用模式

  • r」:唯讀模式,是從檔案開始的預設模式。
  • r+」:讀寫模式,從檔案開頭開始。
  • w」:只寫模式,建立新檔案或截斷現有檔案進行寫入。
  • w+」:讀寫模式,建立一個新檔案或截斷一個現有檔案進行讀寫。
  • a」:只寫模式,如果檔案存在,它會將檔案附加到一個新的檔案將被建立為僅寫入。
  • a+」:讀寫模式,如果檔案存在,它將附加檔案,一個新檔案將被建立用於寫入和讀取。

IO控制台

IO控制台提供了與控制台互動的不同方法。IO類提供以下基本方法:

  • IO::console
  • IO#raw#raw!
  • IO#cooked
  • IO#cooked!
  • IO#getch
  • IO#echo=
  • IO#echo?
  • IO#noecho
  • IO#winsize
  • IO#winsize=
  • IO#iflush
  • IO#ioflush
  • IO#oflush

Ruby開啟檔案

可以使用不同的讀取,寫入或讀寫方法建立Ruby檔案。

在Ruby中開啟檔案有兩種方法:

  • File.new方法 - 使用這個方法,可以建立一個新的檔案用於讀取,寫入或讀寫。
  • File.open方法 - 使用這個方法建立一個新的檔案物件。該檔案物件被分配給一個檔案。

兩種方法之間的區別是:File.open方法可以與一個塊相關聯,而File.new方法不能。

語法

f = File.new("fileName.rb")

或者 -

File.open("fileName.rb", "mode") do |f|

建立檔案的範例

使用File.open方法在Ruby中建立一個檔案,以便從檔案讀取或寫入資料。

步驟1) 在檔案file-create.rb中,編寫程式碼以建立新檔案,如下所示。

#!/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)在控制台中鍵入以下命令以建立的檔案。

F:\worksp\ruby>ruby file-create.rb
Start to create file ...
End create file.

F:\worksp\ruby>

建立新檔案:create-first-file.txt可在程式碼目錄下找到。

Ruby讀取檔案

讀取檔案有三種不同的方法。要返回一行,使用以下語法。

語法:

f.gets  
 code...

要在當前位置之後返回整個檔案,使用以下語法。

語法

f.read  
 code...

要以檔案行的形式返回檔案,使用以下語法。

語法

f.readlines  
 [code...]

讀取檔案的範例

使用File.open方法在Ruby中建立一個檔案,以便從檔案讀取或寫入資料。

步驟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 的內容顯示在控制台中。

sysread 方法

sysread方法也用於讀取檔案的內容。使用此方法可以以任何模式開啟檔案。

範例:

在檔案: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

執行上面程式碼,輸出結果如下 -

F:\worksp\ruby>ruby file-sysread.rb
This is Yiibai Website
You ar

F:\worksp\ruby>

引數30表示將從檔案列印30個字元。

Ruby寫入檔案

借助於syswrite方法,可以將內容寫入檔案。 需要在此方法的寫入模式下開啟檔案。

新內容將覆蓋已經存在的檔案中的舊內容。

範例

#!/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. '

執行上面程式碼,得到以下輸出結果 -

F:\worksp\ruby>ruby file-syswrite.rb
write to file: about.txt success.

F:\worksp\ruby>

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'

執行上面程式碼,得到以下輸出結果 -

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檔案不再存在,因為它已被刪除。