在Ruby中處理檔案的輸入和輸出的教程_ruby專題

來源:互聯網
上載者:User

Ruby 提供了一整套 I/O 相關的方法,在核心(Kernel)模組中實現。所有的 I/O 方法派生自 IO 類。

類 IO 提供了所有基礎的方法,比如 read、 write、 gets、 puts、 readline、 getc 和 printf。

本章節將講解所有 Ruby 中可用的基礎的 I/O 函數。如需瞭解更多的函數,請查看 Ruby 的 IO 類。
puts 語句

在前面的章節中,您賦值給變數,然後使用 puts 語句列印輸出。

puts 語句指示程式顯示儲存在變數中的值。這將在每行末尾添加一個新行。
執行個體

#!/usr/bin/ruby val1 = "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/ruby puts "Enter a value :"val = getsputs val

這將產生以下結果:

Enter a value :This is entered valueThis is entered value

putc 語句

與 puts 語句不同,puts 語句輸出整個字串到螢幕上,而 putc 語句可用於依次輸出一個字元。
執行個體

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

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

這將產生以下結果:

H

print 語句

print 語句與 puts 語句類似。唯一的不同在於 puts 語句在輸出內容後會跳到下一行,而使用 print 語句時,游標定位在同一行。
執行個體

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

這將產生以下結果:

Hello WorldGood Morning

開啟和關閉檔案

截至現在,您已經讀取並寫入標準輸入和輸出。現在,我們將看看如何操作實際的資料檔案。
File.new 方法

您可以使用 File.new 方法建立一個 File 對象用於讀取、寫入或者讀寫,讀寫權限取決於 mode 字串。最後,您可以使用 File.close 方法來關閉該檔案。
文法

aFile = File.new("filename", "mode")  # ... 處理檔案aFile.close

File.open 方法

您可以使用 File.open 方法建立一個新的 file 對象,並把該 file 對象賦值給檔案。但是,File.open 和 File.new 方法之間有一點不同。不同點是 File.open 方法可與塊關聯,而 File.new 方法不能。

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

下表列出了開啟檔案的不同模式:

檔案查詢

下面的命令在開啟檔案前檢查檔案是否已存在:

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

下面的命令查詢檔案是否確實是一個檔案:

#!/usr/bin/ruby # 返回 <i>true</i> 或 <i>false</i>File.file?( "text.txt" )

下面的命令檢查給定的檔案名稱是否是一個目錄:

#!/usr/bin/ruby # 一個目錄File::directory?( "/usr/local/bin" ) # => true # 一個檔案File::directory?( "file.rb" ) # => false

下面的命令檢查檔案是否可讀、可寫、可執行:

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

下面的命令檢查檔案是否大小為零:

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

下面的命令返迴文件的大小:

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

下面的命令用於檢查檔案的類型:

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

ftype 方法通過返回下列中的某個值來標識了檔案的類型:file、 directory、 characterSpecial、 blockSpecial、 fifo、 link、 socket 或 unknown。

下面的命令用於檢查檔案被建立、修改或最後訪問的時間:

#!/usr/bin/ruby File::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 提供了處理檔案和目錄的方式。File 類用於處理檔案,Dir 類用於處理目錄。
瀏覽目錄

為了在 Ruby 程式中改變目錄,請使用 Dir.chdir。下面的執行個體改變目前的目錄為 /usr/bin。

Dir.chdir("/usr/bin")

您可以通過 Dir.pwd 查看目前的目錄:
puts Dir.pwd # 返回目前的目錄,類似 /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 設定所有者(owner)、所屬組(group)、每個人(world [anyone])的許可權為 rwxr-xr-x,其中 r = read 讀取,w = write 寫入,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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.