ZetCode

Ruby 读取文件

最后修改于 2023 年 10 月 18 日

本文介绍如何在 Ruby 语言中读取文件。我们读取文本文件和二进制文件。ZetCode 还有一个简洁的 Ruby 教程

Ruby 有 FileIO 类来处理文件。

stones.txt
Garnet
Topaz
Opal
Amethyst
Ruby
Jasper
Pyrite
Malachite
Quartz

这是 stones.txt 文件。

Ruby 将文件读取到字符串

File.read 方法将整个文件读取到一个字符串中。由于此方法将整个内容读入内存,因此它只适用于较小的文件。File.read 在返回之前会确保文件被关闭。

read_into_string.rb
#!/usr/bin/ruby

fname = 'stones.txt'

content = File.read(fname)
p content
puts content

该示例将 stones.txt 读取到一个字符串中。

$ ./read_into_string.rb
Garnet
Topaz
Opal
Amethyst
Ruby
Jasper
Pyrite
Malachite
Quartz
"Garnet\nTopaz\nOpal\nAmethyst\nRuby\nJasper\nPyrite\nMalachite\nQuartz"

这是输出。

Ruby 使用 File.foreach 读取文件

File.foreach 会打开一个文件,然后为读取到的每一行调用给定的块,最后关闭文件。这是 Ruby 中读取文件的一种有效且非常简单的方法。它可以用于大文件。

foreach_fun.rb
#!/usr/bin/ruby

fname = 'stones.txt'

File.foreach(fname) { |line| puts line }

在示例中,我们逐行读取 stones.txt 文件。

Ruby 使用 File.readlines 将文件读取到数组

File.readlines 方法将整个文件读取到一个由行组成的数组中。该方法会自动为我们关闭文件。由于该方法一次性读取整个文件,因此它适用于较小的文件。

read_lines.rb
#!/usr/bin/ruby

fname = 'stones.txt'

lines = File.readlines(fname)
puts lines
p lines

该示例将 stones.txt 文件的内容读取到一个数组中。

$ ./read_lines.rb
Garnet
Topaz
Opal
Amethyst
Ruby
Jasper
Pyrite
Malachite
Quartz
["Garnet\n", "Topaz\n", "Opal\n", "Amethyst\n", "Ruby\n", "Jasper\n",
    "Pyrite\n", "Malachite\n", "Quartz"]

这是输出。

Ruby 使用 File.binread 读取二进制文件

File.binread 方法读取二进制文件。它会在返回前关闭文件。

read_binary.rb
#!/usr/bin/ruby

fname = 'favicon.ico'

data = File.binread(fname)
data2 = data.unpack('H*')[0]

i = 0

data3 = data2.scan /.{1,2}/

data3.each do |e|

    print "#{e} "

    i += 1

    if i % 15 == 0 then
        puts
    end
end

puts

在示例中,我们使用 File.binread 读取了一个小型图像。我们使用 unpack 将数据转换为十六进制值。然后,我们将十六进制值以十五列(每列两个十六进制值)的形式输出。

$ ./read_binary.rb
00 00 01 00 01 00 10 10 00 00 00 00 00 00 68
05 00 00 16 00 00 00 28 00 00 00 10 00 00 00
20 00 00 00 01 00 08 00 00 00 00 00 00 01 00
00 00 00 00 00 00 00 00 00 00 01 00 00 00 00
00 00 00 00 00 00 ff ff ff 00 4d 45 3d 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
...

在本文中,我们展示了如何在 Ruby 语言中读取文件。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。