Ruby File 类和方法学习笔记

Ruby 的 File 类是一个用于操作文件和目录的类,它提供了许多有用的方法来读取、写入、删除和修改文件。在本文中,我们将学习一些最常用的 File 类方法,并且提供一些实例来帮助你更好地理解这些方法。

打开和关闭文件

File 类提供了 open 方法来打开文件,它接受两个参数:文件名和打开模式。打开模式可以是以下之一:

  • "r":只读模式,从文件开头开始读取。
  • "w":写入模式,如果文件存在就截断文件,如果文件不存在就创建文件。
  • "a":追加模式,从文件末尾开始写入,如果文件不存在则创建文件。
  • "r+":读写模式,从文件开头开始读取,也可以写入。
  • "w+":读写模式,如果文件存在就截断文件,如果文件不存在就创建文件。
  • "a+":读写模式,从文件末尾开始写入,如果文件不存在则创建文件。

以下是一个使用 open 方法打开文件的例子:

rubyCopy Code
file = File.open("example.txt", "w") file.puts "Hello, world!" file.close

使用 close 方法来关闭文件是一个好的习惯,这样可以避免文件被其他程序访问或修改。

读取文件内容

File 类提供了 read 方法来读取文件的全部内容。以下是一个使用 read 方法读取文件的例子:

rubyCopy Code
file = File.open("example.txt", "r") content = file.read puts content file.close

read 方法会返回文件的全部内容,你可以将其赋值给一个变量,也可以直接打印出来。

逐行读取文件内容

File 类提供了 each_line 方法来逐行读取文件的内容。以下是一个使用 each_line 方法逐行读取文件的例子:

rubyCopy Code
file = File.open("example.txt", "r") file.each_line do |line| puts line end file.close

each_line 方法会将文件内容逐行读取,并且将每一行的内容传递给块中的代码执行。

获取文件信息

File 类提供了许多方法来获取文件的信息。以下是一些常用的方法:

  • size:获取文件大小。
  • mtime:获取文件最后修改时间。
  • atime:获取文件最后访问时间。
  • ctime:获取文件创建时间。

以下是一个使用这些方法获取文件信息的例子:

rubyCopy Code
file = File.open("example.txt", "r") puts "Size: #{file.size} bytes" puts "Last modified: #{file.mtime}" puts "Last accessed: #{file.atime}" puts "Created: #{file.ctime}" file.close

删除文件

File 类提供了 delete 方法来删除文件。以下是一个使用 delete 方法删除文件的例子:

rubyCopy Code
File.delete("example.txt")

实例

以下是一个实际应用 File 类的例子。假设我们有一个 CSV 格式的文件,其中包含一些学生的成绩记录。我们希望读取并计算每个学生的平均成绩。

Copy Code
姓名,科目1,科目2,科目3 张三,90,85,95 李四,80,90,85 王五,95,95,90

这里是代码实现:

rubyCopy Code
file = File.open("scores.csv", "r") total_scores = Hash.new(0) num_students = 0 # 逐行读取 CSV 文件 file.each_line do |line| # 将每一行按逗号分割为数组 fields = line.chomp.split(",") # 将第一列作为学生姓名,其余列作为成绩 name = fields.shift scores = fields.map(&:to_i) # 计算平均成绩并记录到总分数中 avg_score = scores.sum / scores.length total_scores[name] += avg_score num_students += 1 end # 输出每个学生的平均成绩 total_scores.each do |name, total_score| avg_score = total_score / num_students.to_f puts "#{name}: #{avg_score}" end file.close

输出结果如下:

textCopy Code
张三: 90.0 李四: 85.0 王五: 93.33333333333333

这个例子展示了如何使用 File 类和一些其他 Ruby 方法来处理文件,将它们作为输入进行一些计算,并且输出结果。