Ruby read file
last modified October 18, 2023
In this article we show how to read files in Ruby language. We read text and binary files. ZetCode has also a concise Ruby tutorial.
Ruby has File and IO classes to work with files.
Garnet Topaz Opal Amethyst Ruby Jasper Pyrite Malachite Quartz
This is the stones.txt file.
Ruby read file into string
The File.read file reads the whole file into a string. Since this
method reads the whole content into memory, it is only suitable for smaller
files. The File.read ensures the file is closed before returning.
#!/usr/bin/ruby fname = 'stones.txt' content = File.read(fname) p content puts content
The example reads the stones.txt into a string.
$ ./read_into_string.rb Garnet Topaz Opal Amethyst Ruby Jasper Pyrite Malachite Quartz "Garnet\nTopaz\nOpal\nAmethyst\nRuby\nJasper\nPyrite\nMalachite\nQuartz"
This is the output.
Ruby read file with File.foreach
The File.foreach opens a file, calls the given block for each
line it reads, and closes the file afterwards. This is an effective and very
simple way of reading a file in Ruby. It can be used for large files.
#!/usr/bin/ruby
fname = 'stones.txt'
File.foreach(fname) { |line| puts line }
In the example, we read the stones.txt file line by line.
Ruby read file into array with File.readlines
The File.readlines method reads the whole file into an array of
lines. The method automatically closes the file for us. Since the method reads
the whole file at once, it is suitable for smaller files.
#!/usr/bin/ruby fname = 'stones.txt' lines = File.readlines(fname) puts lines p lines
The example reads the contents of the stones.txt file into the
array.
$ ./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"]
This is the output.
Ruby read binary file with File.binread
The File.binread method reads binary files. It closes the file
before returning
#!/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
In the example, we read a small image with File.binread. We
transform the data into hexadecimal values with unpack. Then we
output the hexadecimal values in fifteen columns of two hexadecimal values.
$ ./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 ...
In this article we have showed how to read file in Ruby language.