Ruby文件I/O

Ruby I/O是与系统交互的一种方式。 数据以字节/字符的形式发送。 IO类是Ruby中所有输入和输出的基础。它可以是双工的,因此可使用多个本机操作系统流。

IO类有一个叫作File类的子类,允许在Ruby中读取和写入文件。 这两个类是密切相关的。 IO对象表示对键盘和屏幕的可读/可写交互。

I/O端口中的常用模式

  • r”:只读模式,是从文件开始的默认模式。
  • r+”:读写模式,从文件开头开始。
  • w”:只写模式,创建新文件或截断现有文件进行写入。
  • w+”:读写模式,创建一个新文件或截断一个现有文件进行读写。
  • a”:只写模式,如果文件存在,它会将文件附加到一个新的文件将被创建为仅写入。
  • a+”:读写模式,如果文件存在,它将附加文件,一个新文件将被创建用于写入和读取。

IO控制台

IO控制台提供了与控制台交互的不同方法。IO类提供以下基本方法:

  • IO::console
  • IO#raw#raw!
  • IO#cooked
  • IO#cooked!
  • IO#getch
  • IO#echo=
  • IO#echo?
  • IO#noecho
  • IO#winsize
  • IO#winsize=
  • IO#iflush
  • IO#ioflush
  • IO#oflush

Ruby打开文件

可以使用不同的读取,写入或读写方法创建Ruby文件。

在Ruby中打开文件有两种方法:

  • File.new方法 - 使用这个方法,可以创建一个新的文件用于读取,写入或读写。
  • File.open方法 - 使用这个方法创建一个新的文件对象。该文件对象被分配给一个文件。

两种方法之间的区别是:File.open方法可以与一个块相关联,而File.new方法不能。

语法

f = File.new("fileName.rb")

或者 -

File.open("fileName.rb", "mode") do |f|

创建文件的示例

使用File.open方法在Ruby中创建一个文件,以便从文件读取或写入数据。

步骤1) 在文件file-create.rb中,编写代码以创建新文件,如下所示。

#!/usr/bin/ruby   
# file : file-create.rb
puts 'Start to create file ...'
File.open('create-first-file.txt', 'w') do |f|   
    f.puts "This is zaixian Website"   
    f.write "You are reading Ruby tutorial.\n"   
    f << "Please visit our website.\n"   
end   
puts 'End create file.'

步骤2)在控制台中键入以下命令以创建的文件。

F:\worksp\ruby>ruby file-create.rb
Start to create file ...
End create file.

F:\worksp\ruby>

创建新文件:create-first-file.txt可在代码目录下找到。

Ruby读取文件

读取文件有三种不同的方法。要返回一行,使用以下语法。

语法:

f.gets  
 code...

要在当前位置之后返回整个文件,使用以下语法。

语法

f.read  
 code...

要以文件行的形式返回文件,使用以下语法。

语法

f.readlines  
 [code...]

读取文件的示例

使用File.open方法在Ruby中创建一个文件,以便从文件读取或写入数据。

步骤1)在文件 file-read.rb 中,编写代码以读取已存在的文件,如下所示。

#!/usr/bin/ruby   
# file : file-read.rb
while line = gets   
    puts line   
end

步骤2)在控制台中输入以下命令以读取文件。

F:\worksp\ruby>ruby file-read.rb create-first-file.txt
This is zaixian Website
You are reading Ruby tutorial.
Please visit our website.

F:\worksp\ruby>

关于文件:create-first-file.txt 的内容显示在控制台中。

sysread 方法

sysread方法也用于读取文件的内容。使用此方法可以以任何模式打开文件。

示例:

在文件:file-sysread.rb中,编写代码以读取已存在的文件,如下所示。

#!/usr/bin/ruby   

aFile = File.new("create-first-file.txt", "r")   
if aFile   
   content = aFile.sysread(30)   
   puts content   
else   
   puts "Unable to open file!"   
end

执行上面代码,输出结果如下 -

F:\worksp\ruby>ruby file-sysread.rb
This is zaixian Website
You ar

F:\worksp\ruby>

参数30表示将从文件打印30个字符。

Ruby写入文件

借助于syswrite方法,可以将内容写入文件。 需要在此方法的写入模式下打开文件。

新内容将覆盖已经存在的文件中的旧内容。

示例

#!/usr/bin/ruby   
# file : file-syswrite.rb

aFile = File.new("about.txt", "r+")   
if aFile   
aFile.syswrite("New content is written in this file.\n Yes, do...while write \n我乱写一片.")   
end  
puts 'write to file: about.txt success. '

执行上面代码,得到以下输出结果 -

F:\worksp\ruby>ruby file-syswrite.rb
write to file: about.txt success.

F:\worksp\ruby>

Ruby重命名和删除文件

使用rename方法重命名Ruby文件,并使用delete方法进行删除。

要重命名文件,使用以下语法。

File.rename("olderName", "newName.txt")  
``

**实例**

```ruby
#!/usr/bin/ruby   
# file : file-rename.rb

File.rename("about.txt", "about.new.txt")
puts 'rename file => about.txt to about.new.txt'

执行上面代码,得到以下输出结果 -

F:\worksp\ruby>ruby file-rename.rb
rename file => about.txt to about.new.txt

F:\worksp\ruby>

在上面的输出中,about.txt文件不再存在,因为它的名称已被更改为about.new.txt文件。

要删除文件,使用以下语法。

File.delete("filename.txt")

示例

#!/usr/bin/ruby   

File.delete("new.txt")

在上述输出中,new.txt文件不再存在,因为它已被删除。


上一篇: Ruby迭代器 下一篇: Ruby目录