在Ruby中處理文件的輸入和輸出的教程
Ruby 提供了一整套 I/O 相關(guān)的方法,在內(nèi)核(Kernel)模塊中實(shí)現(xiàn)。所有的 I/O 方法派生自 IO 類。
類 IO 提供了所有基礎(chǔ)的方法,比如 read、 write、 gets、 puts、 readline、 getc 和 printf。
本章節(jié)將講解所有 Ruby 中可用的基礎(chǔ)的 I/O 函數(shù)。如需了解更多的函數(shù),請(qǐng)查看 Ruby 的 IO 類。
puts 語句
在前面的章節(jié)中,您賦值給變量,然后使用 puts 語句打印輸出。
puts 語句指示程序顯示存儲(chǔ)在變量中的值。這將在每行末尾添加一個(gè)新行。
實(shí)例
#!/usr/bin/ruby val1 = "This is variable one" val2 = "This is variable two" puts val1 puts val2
這將產(chǎn)生以下結(jié)果:
This is variable one This is variable two
gets 語句
gets 語句可用于獲取來自名為 STDIN 的標(biāo)準(zhǔn)屏幕的用戶輸入。
實(shí)例
下面的代碼演示了如何使用 gets 語句。該代碼將提示用戶輸入一個(gè)值,該值將被存儲(chǔ)在變量 val 中,最后會(huì)被打印在 STDOUT 上。
#!/usr/bin/ruby puts "Enter a value :" val = gets puts val
這將產(chǎn)生以下結(jié)果:
Enter a value : This is entered value This is entered value
putc 語句
與 puts 語句不同,puts 語句輸出整個(gè)字符串到屏幕上,而 putc 語句可用于依次輸出一個(gè)字符。
實(shí)例
下面代碼的輸出只是字符 H:
#!/usr/bin/ruby str="Hello Ruby!" putc str
這將產(chǎn)生以下結(jié)果:
H
print 語句
print 語句與 puts 語句類似。唯一的不同在于 puts 語句在輸出內(nèi)容后會(huì)跳到下一行,而使用 print 語句時(shí),光標(biāo)定位在同一行。
實(shí)例
#!/usr/bin/ruby print "Hello World" print "Good Morning"
這將產(chǎn)生以下結(jié)果:
Hello WorldGood Morning
打開和關(guān)閉文件
截至現(xiàn)在,您已經(jīng)讀取并寫入標(biāo)準(zhǔn)輸入和輸出。現(xiàn)在,我們將看看如何操作實(shí)際的數(shù)據(jù)文件。
File.new 方法
您可以使用 File.new 方法創(chuàng)建一個(gè) File 對(duì)象用于讀取、寫入或者讀寫,讀寫權(quán)限取決于 mode 字符串。最后,您可以使用 File.close 方法來關(guān)閉該文件。
語法
aFile = File.new("filename", "mode") # ... 處理文件 aFile.close
File.open 方法
您可以使用 File.open 方法創(chuàng)建一個(gè)新的 file 對(duì)象,并把該 file 對(duì)象賦值給文件。但是,F(xiàn)ile.open 和 File.new 方法之間有一點(diǎn)不同。不同點(diǎn)是 File.open 方法可與塊關(guān)聯(lián),而 File.new 方法不能。
File.open("filename", "mode") do |aFile| # ... process the file end
下表列出了打開文件的不同模式:
文件查詢
下面的命令在打開文件前檢查文件是否已存在:
#!/usr/bin/ruby File.open("file.rb") if File::exists?( "file.rb" )
下面的命令查詢文件是否確實(shí)是一個(gè)文件:
#!/usr/bin/ruby # 返回 <i>true</i> 或 <i>false</i> File.file?( "text.txt" )
下面的命令檢查給定的文件名是否是一個(gè)目錄:
#!/usr/bin/ruby # 一個(gè)目錄 File::directory?( "/usr/local/bin" ) # => true # 一個(gè)文件 File::directory?( "file.rb" ) # => false
下面的命令檢查文件是否可讀、可寫、可執(zhí)行:
#!/usr/bin/ruby File.readable?( "test.txt" ) # => true File.writable?( "test.txt" ) # => true File.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 方法通過返回下列中的某個(gè)值來標(biāo)識(shí)了文件的類型:file、 directory、 characterSpecial、 blockSpecial、 fifo、 link、 socket 或 unknown。
下面的命令用于檢查文件被創(chuàng)建、修改或最后訪問的時(shí)間:
#!/usr/bin/ruby File::ctime( "test.txt" ) # => Fri May 09 10:06:37 -0700 2008 File::mtime( "text.txt" ) # => Fri May 09 10:44:44 -0700 2008 File::atime( "text.txt" ) # => Fri May 09 10:45:01 -0700 2008
Ruby 中的目錄
所有的文件都是包含在目錄中,Ruby 提供了處理文件和目錄的方式。File 類用于處理文件,Dir 類用于處理目錄。
瀏覽目錄
為了在 Ruby 程序中改變目錄,請(qǐng)使用 Dir.chdir。下面的實(shí)例改變當(dāng)前目錄為 /usr/bin。
Dir.chdir("/usr/bin")
您可以通過 Dir.pwd 查看當(dāng)前目錄:
puts Dir.pwd # 返回當(dāng)前目錄,類似 /usr/bin
您可以使用 Dir.entries 獲取指定目錄內(nèi)的文件和目錄列表:
puts Dir.entries("/usr/bin").join(' ')
Dir.entries 返回一個(gè)數(shù)組,包含指定目錄內(nèi)的所有項(xiàng)。Dir.foreach 提供了相同的功能:
Dir.foreach("/usr/bin") do |entry| puts entry end
獲取目錄列表的一個(gè)更簡(jiǎn)潔的方式是通過使用 Dir 的類數(shù)組的方法:
Dir["/usr/bin/*"]
創(chuàng)建目錄
Dir.mkdir 可用于創(chuàng)建目錄:
Dir.mkdir("mynewdir")
您也可以通過 mkdir 在新目錄(不是已存在的目錄)上設(shè)置權(quán)限:
注意:掩碼 755 設(shè)置所有者(owner)、所屬組(group)、每個(gè)人(world [anyone])的權(quán)限為 rwxr-xr-x,其中 r = read 讀取,w = write 寫入,x = execute 執(zhí)行。
Dir.mkdir( "mynewdir", 755 )
刪除目錄
Dir.delete 可用于刪除目錄。Dir.unlink 和 Dir.rmdir 執(zhí)行同樣的功能,為我們提供了便利。
Dir.delete("testdir")
創(chuàng)建文件 & 臨時(shí)目錄
臨時(shí)文件是那些在程序執(zhí)行過程中被簡(jiǎn)單地創(chuàng)建,但不會(huì)永久性存儲(chǔ)的信息。
Dir.tmpdir 提供了當(dāng)前系統(tǒng)上臨時(shí)目錄的路徑,但是該方法默認(rèn)情況下是不可用的。為了讓 Dir.tmpdir 可用,使用必需的 'tmpdir' 是必要的。
您可以把 Dir.tmpdir 和 File.join 一起使用,來創(chuàng)建一個(gè)獨(dú)立于平臺(tái)的臨時(shí)文件:
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)
這段代碼創(chuàng)建了一個(gè)臨時(shí)文件,并向其中寫入數(shù)據(jù),然后刪除文件。Ruby 的標(biāo)準(zhǔn)庫也包含了一個(gè)名為 Tempfile 的庫,該庫可用于創(chuàng)建臨時(shí)文件:
require 'tempfile' f = Tempfile.new('tingtong') f.puts "Hello" puts f.path f.close
相關(guān)文章
Ruby中使用Nokogiri包來操作XML格式數(shù)據(jù)的教程
這篇文章主要介紹了Ruby中使用Nokogiri包來操作XML格式數(shù)據(jù)的教程,Nokogiri是一個(gè)gem包,Nokogiri可以依靠XPath和CSS3選擇器方式來實(shí)現(xiàn)搜索功能,比較強(qiáng)大,需要的朋友可以參考下2016-04-04Linux系統(tǒng)上配置Nginx+Ruby on Rails+MySQL超攻略
這篇文章主要介紹了Linux系統(tǒng)上配置Nginx+Ruby on Rails+MySQL超攻略,用到了RVM,此種服務(wù)器搭建配置極力推薦!需要的朋友可以參考下2015-08-08對(duì)Ruby on Rails進(jìn)行高效的單元測(cè)試的教程
這篇文章主要介紹了在Ruby on Rails中進(jìn)行高效的單元測(cè)試的教程,使用到了Ruby的RSpec和Factory Girl框架,需要的朋友可以參考下2015-04-04PHP實(shí)現(xiàn)的一個(gè)保存遠(yuǎn)程文件到本地的函數(shù)分享
這篇文章主要介紹了PHP實(shí)現(xiàn)的一個(gè)保存遠(yuǎn)程文件到本地的函數(shù)分享,本文直接給出實(shí)現(xiàn)代碼和使用方法,需要的朋友可以參考下2014-11-11Ruby單元測(cè)試框架TestUnit的替代者M(jìn)iniTest介紹
這篇文章主要介紹了Ruby單元測(cè)試框架TestUnit的替代者M(jìn)iniTest介紹,本文先是對(duì)比了TestUnit、MiniTest的優(yōu)劣,然后給出了MiniTest的使用示例,需要的朋友可以參考下2015-03-03Linux下Redis數(shù)據(jù)庫的安裝方法與自動(dòng)啟動(dòng)腳本分享
這篇文章主要介紹了Linux下Redis數(shù)據(jù)庫的安裝方法與自動(dòng)啟動(dòng)腳本分享,自動(dòng)啟動(dòng)腳本分別針對(duì)CentOS和Ubuntu系統(tǒng)來給出了編寫示例,需要的朋友可以參考下2016-05-05