持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情
一、文件属性操作
Ruby 中 File 类中内嵌的一个 Stat 类可以实现对文件属性的操作,也可以实现对文件属性的访问,如文件操作权限、文件大小、文件时间戳等。需要注意的是 File::Stat 类下的部分方法并不适用在所有的操作系统上。
权限操作
File::Stat ;类的 mode 方法可以获取对文件的访问权限,File 类的 chmod 方法可以修改文件的权限。
# 文件权限
file = "readme.txt"
mode = File.stat(file).mode
puts "文件的访问权限代码为 #{mode}"
# 修改权限
File.chmod(01522, file)
mode = File.stat(file).mode
puts "修改之后文件的访问权限代码为 #{mode}"
在同级目录下新建一个 readme.txt 文件,执行上述代码,输出结果如下:
文件的访问权限代码为 33188
修改之后文件的访问权限代码为 33618
检查文件是否存在
在对文件进行读取和写入之前,首先要进行判断文件是否存在才能执行一些响应的操作。Ruby 中检查一个文件是否存在可以使用 FileTest 莫家中的模块方法 exist? 和 exists?方法来实现。
file = "readme.txt"
exist = FileTest.exist?(file)
exists = FileTest.exists?(file)
if (exist)
puts "exist:文件 #{file} 存在"
else
puts "exist:文件 #{file} 不存在"
end
if (exists)
puts "exists:文件 #{file} 存在"
else
puts "exists:文件 #{file} 不存在"
end
执行上述代码,输出结果如下:
exist:文件 readme.txt 存在
exists:文件 readme.txt 存在
查看文件大小
查看文件大小可以使用 FileTest 模块中的模块方法 size?、zero? 和 size 方法来实现,其中
- size?: 访问文件大小,如果文件大小为 0,则返回 nil
- zero?: 如果文件大小为0,返回 true,否则返回 false
- size: 返回文件的实际大小
file = "readme.txt"
puts "size?" + FileTest.size?(file).to_s
puts "zero?" + FileTest.zero?(file).to_s
puts "size:" + FileTest.size(file).to_s
执行上述代码,输出结果如下:
size?20
zero?false
size:20
获取与设置文件戳
文件有三个与之相关的时间戳,分别为最后一次修改的时间、最后一次读取的时间和创建时间,对于这三个时间戳可以通过 File::Stat 类中的 mtime、atime 和 ctime 来访问,可以通过同名的类方法或者实例方法来获取。
File 类中提供的 utime 方法可以设置文件的最后一次访问时间和最后一次修改时间。
file = "readme.txt"
# 获取三个时间戳,使用类方法
mtime = File.mtime(file)
atime = File.atime(file)
ctime = File.ctime(file)
puts "修改前的时间戳:mtime=#{mtime}, atime=#{atime}, ctime=#{ctime}"
# 修改时间戳
File.utime(Time.now, Time.now, file)
# 再次获取和时间戳,使用实例方法
file_obj = File.new(file)
mtime = file_obj.mtime
atime = file_obj.atime
ctime = file_obj.ctime
puts "修改后的时间戳:mtime=#{mtime}, atime=#{atime}, ctime=#{ctime}"
执行上述代码,输出结果如下:
修改前的时间戳:mtime=2022-06-18 14:05:23 +0800, atime=2022-06-18 14:05:24 +0800, ctime=2022-06-18 14:05:23 +0800
修改后的时间戳:mtime=2022-06-18 14:05:35 +0800, atime=2022-06-18 14:05:35 +0800, ctime=2022-06-18 14:05:35 +0800
二、读取文件
使用 Ruby 读取文件首先要打开文件,之后再进行读取的操作,当然有打开就有关闭。
打开文件
Ruby 中打开文件的方式有 3 种
使用 File 类的 new 方法打开文件
在使用 File 类的 new 方法实例化一个对象的时候,需要指定文件作为参数,但是这种方式只能读取,如果需要进行其他操作需要传入第二个参数既操作模式,操作模式默认是 r 只读,除此之外还有其他几种操作模式
path = "readme.txt"
file = File.new(path, "r")
| 操作模式 | 说明 |
|---|---|
| r/r+ | 只读模式打开文件,同时将文件指针放在文件的开始处 |
| w/w+ | 只写模式打开文件,打开文件后会见该文件内容清空后在写入指定的内容,如果文件不存在,则会自动创建该文件 |
| a/a+ | 追加模式打开文件,打开文件后将文件指针放在文件的结尾处,追加指定的内容,如果文件不存在则自动创建该文件 |
| b | 二进制模式打开文件 |