程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> Ruby中操作文件的方法介紹

Ruby中操作文件的方法介紹

編輯:更多關於編程

       這篇文章主要介紹了Ruby中操作文件的方法介紹,是Ruby學習當中的基礎知識,需要的朋友可以參考下

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

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

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

      puts 語句:

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

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

      例子:

      ?

    1 2 3 4 5 6 #!/usr/bin/ruby   val1 = "This is variable one" val2 = "This is variable two" puts val1 puts val2

      這將產生以下結果:

      ?

    1 2 This is variable one This is variable two

      gets 語句:

      gets 語句可以用來從用戶從標准屏幕采取輸入調用 STDIN.

      例如:

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

      ?

    1 2 3 4 5 #!/usr/bin/ruby   puts "Enter a value :" val = gets puts val

      這將產生以下結果:

      ?

    1 2 3 Enter a value : This is entered value This is entered value

      putc 語句:

      與 puts 語句不相同,它在屏幕上輸出整個字符串,而putc 語句可以用來一次輸出一個字符。

      實例:

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

      ?

    1 2 3 4 #!/usr/bin/ruby   str="Hello Ruby!" putc str

      這將產生以下結果:

      ?

    1 H

      print 語句:

      print 語句是類似 puts 語句。唯一的區別是,puts語句後進入到下一行打印的內容,print 語句將光標定位在同一行上。

      實例:

      ?

    1 2 3 4 #!/usr/bin/ruby   print "Hello World" print "Good Morning"

      這將產生以下結果:

      ?

    1 Hello WorldGood Morning

      打開和關閉文件:

      到現在為止,我們已經可以讀取和寫入的標准輸入和輸出。我們將看看如何運用到實際的數據文件。

      File.new 方法:

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

      語法:

      ?

    1 2 3 aFile = File.new("filename", "mode") # ... process the file aFile.close

      File.open 方法:

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

      ?

    1 2 3 File.open("filename", "mode") do |aFile| # ... process the file end

      這裡是一個不同的模式打開文件列表:

    2015512120340068.jpg (585×415)

      讀取和寫入文件:

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

      然而,I/O對象提供額外的訪問方法,使我們的生活更輕松。

      sysread 方法:

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

      以下是輸入文本文件:

      ?

    1 This is a simple text file for testing purpose.

      現在,讓我們嘗試讀取這個文件:

      ?

    1 2 3 4 5 6 7 8 9 #!/usr/bin/ruby   aFile = File.new("input.txt", "r") if aFile content = aFile.sysread(20) puts content else puts "Unable to open file!" end

      這條語句將輸出文件的前20個字符。現在,將文件指針放置在第21個字符。

      syswrite 方法:

      可以使用方法 syswrite 中的內容寫入到一個文件中。需要打開該文件在寫入模式使用方法 syswrite 時。

      例如:

      ?

    1 2 3 4 5 6 7 8 #!/usr/bin/ruby   aFile = File.new("input.txt", "r+") if aFile aFile.syswrite("ABCDEF") else puts "Unable to open file!" end

      這條語句將 “ABCDEF” 寫入到文件中。

      each_byte 方法:

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

      ?

    1 2 3 4 5 6 7 8 9 #!/usr/bin/ruby   aFile = 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,然後在屏幕上顯示如下:

      ?

    1 2 3 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:

      ?

    1 2 3 4 5 #!/usr/bin/ruby   arr = IO.readlines("input.txt") puts arr[0] puts arr[1]

      在這段代碼中,變量arr是一個數組。將文件 input.txt 的每一行,將數組arr中的元素。因此arr[0]將包含在第一行,而到達[1]將包含該文件的第二行。

      IO.foreach 方法:

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

      ?

    1 2 3 #!/usr/bin/ruby   IO.foreach("input.txt"){|block| puts block}

      此代碼將傳遞該文件的內容,測試可變塊的行,然後,輸出將被顯示在屏幕上。

      重命名和刪除文件:

      可以重命名和刪除文件用Ruby以編程方式使用 rename 和 delete 方法。

      下面的例子,重命名現有文件 test1.txt:

      ?

    1 2 3 4 #!/usr/bin/ruby   # Rename a file from test1.txt to test2.txt File.rename( "test1.txt", "test2.txt" )

      下面的例子刪除現有文件 test2.txt:

      ?

    1 2 3 4 #!/usr/bin/ruby   # Delete file test2.txt File.delete("text2.txt")

      文件模式和所有權:

      使用chmod掩碼的方法來改變模式或權限/訪問的文件列表:

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

      ?

    1 2 3 4 #!/usr/bin/ruby   file = File.new( "test.txt", "w" ) file.chmod( 0755 )

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

    2015512120613148.jpg (576×528)

      文件查詢:

      下面的命令測試一個文件是否存在,然後再打開它:

      ?

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

      下面的命令查詢文件是否是真是個文件:

      ?

    1 2 3 4 #!/usr/bin/ruby   # This returns either true or false File.file?( "text.txt" )

      給定文件名是否為一個目錄,下面的命令查找:

      ?

    1 2 3 4 5 6 7 #!/usr/bin/ruby   # a directory File::directory?( "/usr/local/bin" ) # => true   # a file File::directory?( "file.rb" ) # => false

      下面的命令查找該文件是否可讀,可寫或可執行文件:

      ?

    1 2 3 4 5 #!/usr/bin/ruby   File.readable?( "test.txt" ) # => true File.writable?( "test.txt" ) # => true File.executable?( "test.txt" ) # => false

      下面的命令查找該文件是否有大小為零或不:

      ?

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

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

      ?

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

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

      ?

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

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

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

      ?

    1 2 3 4 5 #!/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也沒有處理這些問題。鑒於文件中類處理文件,使用目錄處理Dir類。

      通過目錄導航:

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

      ?

    1 Dir.chdir("/usr/bin")

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

      ?

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

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

      ?

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

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

      ?

    1 2 3 Dir.foreach("/usr/bin") do |entry| puts entry end

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

      ?

    1 Dir["/usr/bin/*"]

      創建一個目錄:

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

      ?

    1 Dir.mkdir("mynewdir")

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

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

      ?

    1 Dir.mkdir( "mynewdir", 755 )

      刪除目錄:

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

      Dir.delete("testdir")

      創建文件和臨時目錄:

      臨時文件是程序的執行過程中可能會產生短暫的,但不是永久存儲的信息。

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

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

      ?

    1 2 3 4 5 6 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 ,它可以創建臨時文件:

      ?

    1 2 3 4 5 require 'tempfile' f = Tempfile.new('tingtong') f.puts "Hello" puts f.path f.close

      內置功能:

      這裡是Ruby的支持功能,處理文件和目錄的完整列表:

      File Class and Methods.

      Dir Class and Methods.

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved