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 Yiibai 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 Yiibai 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 Yiibai 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
文件不再存在,因为它已被删除。