<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Ruby 文件的輸入與輸出 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 val1 puts val2 ``` 這將產生以下結果: ``` This is variable one This is variable two ``` ## _gets_ 語句 _gets_ 語句可用于獲取來自名為 STDIN 的標準屏幕的用戶輸入。 ## 實例 下面的代碼演示了如何使用 gets 語句。該代碼將提示用戶輸入一個值,該值將被存儲在變量 val 中,最后會被打印在 STDOUT 上。 ``` #!/usr/bin/ruby puts "Enter a value :" val = gets puts val ``` 這將產生以下結果: ``` Enter a value : This is entered value This 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 file end ``` 下表列出了打開文件的不同模式: | 模式 | 描述 | | --- | --- | | r | 只讀模式。文件指針被放置在文件的開頭。這是默認模式。 | | r+ | 讀寫模式。文件指針被放置在文件的開頭。 | | w | 只寫模式。如果文件存在,則重寫文件。如果文件不存在,則創建一個新文件用于寫入。 | | w+ | 讀寫模式。如果文件存在,則重寫已存在的文件。如果文件不存在,則創建一個新文件用于讀寫。 | | a | 只寫模式。如果文件存在,則文件指針被放置在文件的末尾。也就是說,文件是追加模式。如果文件不存在,則創建一個新文件用于寫入。 | | a+ | 讀寫模式。如果文件存在,則文件指針被放置在文件的末尾。也就是說,文件是追加模式。如果文件不存在,則創建一個新文件用于讀寫。 | ## 讀取和寫入文件 用于簡單 I/O 的方法也可用于所有 file 對象。所以,gets 從標準輸入讀取一行,_aFile.gets_ 從文件對象 aFile 讀取一行。 但是,I/O 對象提供了訪問方法的附加設置,為我們提供了便利。 ## _sysread_ 方法 您可以使用方法 _sysread_ 來讀取文件的內容。當使用方法 sysread 時,您可以使用任意一種模式打開文件。例如: 下面是輸入文本文件: ``` This is a simple text file for testing purpose. ``` 現在讓我們嘗試讀取這個文件: ``` #!/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 時,您需要以寫入模式打開文件。例如: ``` #!/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_ 總是與塊相關聯。請看下面的代碼實例: ``` #!/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,然后顯示在屏幕上,如下所示: ``` 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.readlines_ 是 IO 類中的一個方法。該方法逐行返回文件的內容。下面的代碼顯示了方法 _IO.readlines_ 的使用: ``` #!/usr/bin/ruby arr = IO.readlines("input.txt") puts arr[0] puts arr[1] ``` 在這段代碼中,變量 arr 是一個數組。文件 _input.txt_ 的每一行將是數組 arr 中的一個元素。因此,arr[0] 將包含第一行,而 arr[1] 將包含文件的第二行。 ## _IO.foreach_ 方法 該方法也逐行返回輸出。方法 _foreach_ 與方法 _readlines_ 之間不同的是,方法 _foreach_ 與塊相關聯。但是,不像方法 _readlines_,方法 _foreach_ 不是返回一個數組。例如: ``` #!/usr/bin/ruby IO.foreach("input.txt"){|block| puts block} ``` 這段代碼將把文件 _test_ 的內容逐行傳給變量 block,然后輸出將顯示在屏幕上。 ## 重命名和刪除文件 您可以通過 _rename_ 和 _delete_ 方法重命名和刪除文件。 下面的實例重命名一個已存在文件 _test1.txt_: ``` #!/usr/bin/ruby # 重命名文件 test1.txt 為 test2.txt File.rename( "test1.txt", "test2.txt" ) ``` 下面的實例刪除一個已存在文件 _test2.txt_: ``` #!/usr/bin/ruby # 刪除文件 test2.txt File.delete("text2.txt") ``` ## 文件模式與所有權 使用帶有掩碼的 _chmod_ 方法來改變文件的模式或權限/訪問列表: 下面的實例改變一個已存在文件 _test.txt_ 的模式為一個掩碼值: ``` #!/usr/bin/ruby file = File.new( "test.txt", "w" ) file.chmod( 0755 ) ``` 下表列出了 _chmod_ 方法中可使用的不同的掩碼: | 掩碼 | 描述 | | --- | --- | | 0700 | rwx 掩碼,針對所有者 | | 0400 | r ,針對所有者 | | 0200 | w ,針對所有者 | | 0100 | x ,針對所有者 | | 0070 | rwx 掩碼,針對所屬組 | | 0040 | r ,針對所屬組 | | 0020 | w ,針對所屬組 | | 0010 | x ,針對所屬組 | | 0007 | rwx 掩碼,針對其他人 | | 0004 | r ,針對其他人 | | 0002 | w ,針對其他人 | | 0001 | x ,針對其他人 | | 4000 | 執行時設置用戶 ID | | 2000 | 執行時設置所屬組 ID | | 1000 | 保存交換文本,甚至在使用后也會保存 | ## 文件查詢 下面的命令在打開文件前檢查文件是否已存在: ``` #!/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" ) # => 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 方法通過返回下列中的某個值來標識了文件的類型:_file、 directory、 characterSpecial、 blockSpecial、 fifo、 link、 socket 或 unknown_。 下面的命令用于檢查文件被創建、修改或最后訪問的時間: ``` #!/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 程序中改變目錄,請使用 _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 entry end ``` 獲取目錄列表的一個更簡潔的方式是通過使用 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 ``` ## 內建函數 下面提供了 Ruby 中處理文件和目錄的內建函數的完整列表: * [File 類和方法](ruby-file-methods.html "Ruby File 類和方法")。 * [Dir 類和方法](ruby-dir-methods.html "Ruby Dir 類和方法")。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看