Ruby中操作檔案的方法介紹_ruby專題

來源:互聯網
上載者:User

 Ruby提供了一套完整的I/O相關的核心模組中實現方法。所有I/O方法來自IO類。

類IO提供了所有的基本方法,如 read, write, gets, puts, readline, getc 和 printf.

本章將涵蓋所有可供在Ruby中使用的基本I/O功能。如需使用更多的功能,請參考Ruby的IO類。
puts 語句:

在前面的章節中,你指定值的變數和然後使用聲明 puts 輸出。

puts 把語句指示程式顯示儲存在變數值。這將添加一個新行,每行末尾寫出(輸出)。
例子:

#!/usr/bin/rubyval1 = "This is variable one"val2 = "This is variable two"puts val1puts val2

這將產生以下結果:

This is variable oneThis is variable two

gets 語句:

 gets 語句可以用來從使用者從標準螢幕採取輸入調用 STDIN.
例如:

下面的代碼顯示了如何使用 gets 語句。此代碼將提示使用者輸入一個值,將被儲存在一個變數val,最後將列印在 STDOUT.

#!/usr/bin/rubyputs "Enter a value :"val = getsputs val

這將產生以下結果:

Enter a value :This is entered valueThis is entered value

putc 語句:

與 puts 語句不相同,它在螢幕上輸出整個字串,而putc 語句可以用來一次輸出一個字元。
執行個體:

下面的代碼的輸出只是一個字元 H:

#!/usr/bin/rubystr="Hello Ruby!"putc str

這將產生以下結果:

H

 print 語句:

print 語句是類似 puts 語句。唯一的區別是,puts語句後進入到下一行列印的內容,print 語句將游標定位在同一行上。
執行個體:

#!/usr/bin/rubyprint "Hello World"print "Good Morning"

這將產生以下結果:

Hello WorldGood Morning

開啟和關閉檔案:

到現在為止,我們已經可以讀取和寫入的標準輸入和輸出。我們將看看如何運用到實際的資料檔案。
File.new 方法:

可以建立一個的File對象使用File.new方法的讀,寫或兩者兼有,這需要根據模式串。最後,可以使用File.close的方法來關閉該檔案。
文法:

aFile = File.new("filename", "mode")  # ... process the fileaFile.close

File.open 方法:

可以使用File.open方法的方法來建立一個新的檔案對象,並分配到一個檔案中,檔案對象。然而,File.open方法和File.new方法之間區別。 File.open方法不同的是,可以關聯一個塊,而不能在File.new方法使用。

File.open("filename", "mode") do |aFile|  # ... process the fileend

這裡是一個不同的模式開啟檔案清單:

 讀取和寫入檔案:

同樣的方法,我們一直在使用“簡單”的I/O所有檔案對象。因此,gets 從標準輸入讀取一行,File.gets檔案從檔案對象讀取一行。

然而,I/O對象提供額外的存取方法,使我們的生活更輕鬆。
sysread 方法:

可以使用該方法sysread讀取一個檔案的內容。可以開啟該檔案時,在任何模式中使用的方法sysread。例如:

以下是輸入文字檔:

This is a simple text file for testing purpose.

現在,讓我們嘗試讀取這個檔案:

#!/usr/bin/rubyaFile = File.new("input.txt", "r")if aFile  content = aFile.sysread(20)  puts contentelse  puts "Unable to open file!"end

這條語句將輸出檔案的前20個字元。現在,將檔案指標放置在第21個字元。
syswrite 方法:

可以使用方法 syswrite 中的內容寫入到一個檔案中。需要開啟該檔案在寫入模式使用方法 syswrite 時。
例如:

#!/usr/bin/rubyaFile = File.new("input.txt", "r+")if aFile  aFile.syswrite("ABCDEF")else  puts "Unable to open file!"end

這條語句將 “ABCDEF” 寫入到檔案中。
each_byte 方法:

這種方法屬於類 File 。總是關聯一個塊方法each_byte。考慮下面的程式碼範例::

#!/usr/bin/rubyaFile = File.new("input.txt", "r+")if aFile  aFile.syswrite("ABCDEF")  aFile.each_byte {|ch| putc ch; putc ?. }else  puts "Unable to open file!"end

一個接一個字元傳遞變數ch,然後在螢幕上顯示如下:

s. .a. .s.i.m.p.l.e. .t.e.x.t. .f.i.l.e. .f.o.r. .t.e.s.t.i.n.g. .p.u.r.p.o.s.e.....

IO.readlines 方法:

類File 是 IO類的一個子類。類的IO也有一些方法可用於對檔案進行操作。

IO類的方法之一是IO.readlines。此方法返回的內容檔案行。下面的代碼顯示使用方法IO.readlines:

#!/usr/bin/rubyarr = IO.readlines("input.txt")puts arr[0]puts arr[1]

在這段代碼中,變數arr是一個數組。將檔案 input.txt 的每一行,將數組arr中的元素。因此arr[0]將包含在第一行,而到達[1]將包含該檔案的第二行。
IO.foreach 方法:

此方法還返回一行一行的輸出。foreach和 readlines 方法之間的差異是 foreach方法可以帶有塊相關聯,foreach不會返回一個數組。例如:

#!/usr/bin/rubyIO.foreach("input.txt"){|block| puts block}

此代碼將傳遞該檔案的內容,測試可變塊的行,然後,輸出將被顯示在螢幕上。
重新命名和刪除檔案:

可以重新命名和刪除檔案用Ruby以編程方式使用 rename 和 delete 方法。

下面的例子,重新命名現有檔案 test1.txt:

#!/usr/bin/ruby# Rename a file from test1.txt to test2.txtFile.rename( "test1.txt", "test2.txt" )

下面的例子刪除現有檔案 test2.txt:

#!/usr/bin/ruby# Delete file test2.txtFile.delete("text2.txt")

檔案模式和所有權:

使用chmod掩碼的方法來改變模式或許可權/訪問的檔案清單:

下面的例子改變現有的檔案test.txt模式掩碼值:

#!/usr/bin/rubyfile = File.new( "test.txt", "w" )file.chmod( 0755 )

以下的表可以協助選擇不同的面具為chmod方法:

 檔案查詢:

下面的命令測試一個檔案是否存在,然後再開啟它:

#!/usr/bin/rubyFile.open("file.rb") if File::exists?( "file.rb" )

下面的命令查詢檔案是否是真是個檔案:

#!/usr/bin/ruby# This returns either true or falseFile.file?( "text.txt" ) 

給定檔案名稱是否為一個目錄,下面的命令尋找:

#!/usr/bin/ruby# a directoryFile::directory?( "/usr/local/bin" ) # => true# a fileFile::directory?( "file.rb" ) # => false

下面的命令尋找該檔案是否可讀,可寫或可執行檔:

#!/usr/bin/rubyFile.readable?( "test.txt" )  # => trueFile.writable?( "test.txt" )  # => trueFile.executable?( "test.txt" ) # => false

下面的命令尋找該檔案是否有大小為零或不:

#!/usr/bin/rubyFile.zero?( "test.txt" )   # => true

下面的命令返回的檔案大小:

#!/usr/bin/rubyFile.size?( "text.txt" )   # => 1002

可以使用下面的命令找出一種類型的檔案:

#!/usr/bin/rubyFile::ftype( "test.txt" )   # => file

 ftype 方法識別的檔案類型返回下列之一: file, directory, characterSpecial, blockSpecial, fifo, link, socket 或 unknown.

下面的命令可以用來發現當一個檔案被建立,修改或上次訪問:

#!/usr/bin/rubyFile::ctime( "test.txt" ) # => Fri May 09 10:06:37 -0700 2008File::mtime( "text.txt" ) # => Fri May 09 10:44:44 -0700 2008File::atime( "text.txt" ) # => Fri May 09 10:45:01 -0700 2008

Ruby中的目錄:

所有檔案都包含在不同的目錄,Ruby也沒有處理這些問題。鑒於檔案中類處理檔案,使用目錄處理Dir類。
通過目錄導航:

要改變一個Ruby程式的目錄內,可使用Dir.chdir如下。這個例子改變目前的目錄 /usr/bin.

Dir.chdir("/usr/bin")

可以使用 Dir.pwd 找出目前的目錄是什麼:

puts Dir.pwd # This will return something like /usr/bin

得到一個使用一個特定的目錄內的檔案和目錄列表,使用 Dir.entries:

puts Dir.entries("/usr/bin").join(' ')

Dir.entries 返回一個數組的指定目錄內的所有項目。Dir.foreach 提供了相同的功能:

Dir.foreach("/usr/bin") do |entry|  puts entryend

更簡捷的方法擷取目錄列表利用 Dir 類數組的方法:

Dir["/usr/bin/*"]

建立一個目錄:

可以用 Dir.mkdir,來建立目錄:

Dir.mkdir("mynewdir")

還可以設定一個新的目錄許可權(不是一個已經存在的)用mkdir:

注: 掩碼755設定許可權所有者,組表示 [所有人] 類似於 rwxr-xr-x , r = read, w = write, and x = execute.

Dir.mkdir( "mynewdir", 755 )

刪除目錄:

可用 Dir.delete 刪除一個目錄。Dir.unlink 和 Dir.rmdir 執行完全相同的功能,並提供了方便。

Dir.delete("testdir")

建立檔案和臨時目錄:

臨時檔案是程式的執行過程中可能會產生短暫的,但不是永久儲存的資訊。

Dir.tmpdir 提供對當前系統的臨時目錄的路徑,儘管該方法是預設不可用。為了使 Dir.tmpdir 必要使用需要 'tmpdir'.

可以使用 Dir.tmpdir 及 File.join,建立一個獨立於平台的臨時檔案:

require 'tmpdir'  tempfilename = File.join(Dir.tmpdir, "tingtong")  tempfile = File.new(tempfilename, "w")  tempfile.puts "This is a temporary file"  tempfile.close  File.delete(tempfilename)

此代碼建立一個臨時檔案,寫入資料,並刪除它。 Ruby的標準庫還包括一個程式庫Tempfile ,它可以建立臨時檔案:

require 'tempfile'  f = Tempfile.new('tingtong')  f.puts "Hello"  puts f.path  f.close

內建功能:

這裡是Ruby的支援功能,處理檔案和目錄的完整列表:

  •     File Class and Methods.
  •     Dir Class and Methods.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.