Ruby 的 File 类
本章将详细介绍如何在 Ruby 中创建,打开以及读取和写入文件。然后,我们将学习如何删除和重命名文件。
1. 使用 Ruby 创建一个文件
使用 File
类的 new
方法在 Ruby 中创建新文件。新方法接受两个参数,第一个是要创建的文件的名称,第二个是打开文件的模式。下表显示了受支持的文件模式。
模式 | 时机简介(调用的时机) |
---|---|
r | 只读访问。指针位于文件的开头。 |
r+ | 读写访问。指针位于文件的开头。 |
w | 只写访问。指针位于文件的开头。 |
w+ | 读写访问。指针位于文件的开头。 |
a | 只写访问。指针位于文件末尾 |
a+ | 读写访问。指针位于文件末尾 |
b | 二进制文件模式。与以上模式结合使用。仅Windows / DOS |
结合以上信息,我们在只写模式下创建一个新文件。
实例:
File.new("temp.txt", "w")
=> #<File:temp.txt>
2. 打开现有文件
可以使用 File
类的 open
方法打开现有文件:
实例:
file = File.open("temp.txt")
=> #<File:temp.txt>
请注意,可用上表概述的不同模式打开现有文件。例如,我们可以以只读模式打开文件:
file = File.open("temp.txt", "r")
=> #<File:temp.txt>
还可以使用 closed?
来确定文件是否已经打开:
file.closed?
=> false
最后,我们可以使用 Ruby File
类的 close
方法关闭文件:
file = File.open("temp.txt", "r")
=> #<File:temp.txt>
file.close
=> nil
3. 在 Ruby 中重命名和删除文件
在 Ruby 中,分别使用 rename
和 delete
方法来重命名和删除文件。例如,我们可以创建一个新文件,重命名然后删除它。
File.new("tempfile.txt", "w")
=> #<File:tempfile.txt>
File.rename("tempfile.txt", "newfile.txt")
=> 0
File.delete("newfile.txt")
=> 1
4. 获取有关文件的信息
文件处理通常不仅仅需要打开文件。有时有必要在打开文件之前先找到有关文件的信息。File
类为此目的提供了一系列方法。
要查找文件是否已存在,请使用exists?
方法。
File.exists?("temp.txt")
=> true
要确定文件是否真的是文件而不是目录,请使用file?
方法。
File.file?("ruby")
=> false
同样,找出它是否是目录,请使用directory?
方法。
File.directory?("ruby")
=> true
要确定文件是可读,可写还是可执行的请使用readable?
,writeable?
和executable?
方法。
File.readable?("temp.txt")
=> true
File.writable?("temp.txt")
=> true
File.executable?("temp.txt")
=> false
使用size
方法获取文件的大小。
File.size("temp.txt")
=> 99
查找文件是否为零的空文件(即长度为零)使用zero?
。
File.zero?("temp.txt")
=> false
使用ftype
方法找出文件的类型。
File.ftype("temp.txt")
=> "file"
File.ftype("../ruby")
=> "directory"
File.ftype("/dev/sda5")
=> "blockSpecial"
最后我们可以使用ctime
,mtime
和atime
来找出创建,修改和访问时间。
File.ctime("temp.txt")
=> Thu Nov 29 10:51:18 EST 2007
File.mtime("temp.txt")
=> Thu Nov 29 11:14:18 EST 2007
File.atime("temp.txt")
=> Thu Nov 29 11:14:19 EST 2007
5. 读写文件
打开现有文件或创建新文件后,我们需要能够读取和写入该文件。我们可以使用 readline
从文件读取行。
myfile = File.open("temp.txt")
=> #<File:temp.txt>
myfile.readline
=> "This is a test file\n"
myfile.readline
=> "It contains some example lines\n"
另外,我们可以使用each
方法读取整个文件。
myfile = File.open("temp.txt")
=> #<File:temp.txt>
myfile.each {|line| print line }
This is a test file
It contains some example lines
But other than that
It serves no real purpose
也可以使用getc
方法逐个字符地从文件中提取数据。
myfile = File.open("Hello.txt")
=> #<File:temp.txt>
myfile.getc.chr
=> "H"
myfile.getc.chr
=> "e"
myfile.getc.chr
=> "l"
我们还可以使用putc
方法写入文件,一次写入一个字符,或者使用puts
方法一次写入一个字符串-请注意rewind
方法调用的重要性。这会将文件指针移回文件的开头,因此我们可以阅读所写内容。
myfile = File.new("write.txt", "w+") # 读写模式打开文件
=> #<File:write.txt>
myfile.puts("This test line 1") # 写入第一行
=> nil
myfile.puts("This test line 2") # 写入第二行
=> nil
myfile.rewind # 将指针移动到开头
=> 0
myfile.readline
=> "This test line 1\n"
myfile.readline
=> "This test line 2\n"
6. 小结
本章节我们学习了如何使用 File.new
创建文件,文件模式,File.open
打开文件,File.rename
重命名文件,File.delete
删除文件,各种获取文件信息的方法以及文件读写的方法。