In my previous blog Dealing with Directories in Ruby, I explained you, how we can play with directories in ruby. Today I am going to tell you how we can interact with files by opening them in different modes and performing read/write operations in files. So files in ruby are basically handled using two ruby classes that are File class and IO class. The most commonly methods used are:
a) Creating File objects:
File objects can be created using using 2 methods:
1) File.open:
It is used to create a new file object in a mode so that other operations on the file can be performed. You can associate with a block.
File.open("filepath", "mode") do |file|
#File operations
end
The different modes available for a file are:
r Read-only mode
r+ Read-write mode
w Write-only mode
w+ Read-write mode
a Write-only mode but appends at the last
a+ Read and write mode and points at the end of the file
2) File.new:
It is also used to create a file object but unlike File.open it can't be associated to a block.
file = File.new("filepath", "mode")
#File operations
file.close
b) Reading contents from file using sysread method:
This method is used to read the file content. It reads the file on character basis so on the file object if you call this method by passing a number, it will return the characterd upto that position. As it is just for reading the file so you can open file in any mode. Lets see an example suppose we have a file called "nothing.txt" with texts:
I am a rails developer.
I am a python developer.
I am a ruby developer.
Then if we run sysread like this
f = File.new("nothing.txt", "r")
p f.sysread(4)
#=> Output will be
"I am a"
c) Writing contents to file using syswrite method:
For writing contents to a file you can use this method. For using this the file must be opened in write/appending mode
f = File.new("nothing.txt", "w")
f.syswrite("I am a HTML developer")
Now the file nothing.txt will have content:
I am a HTML developer
d) Reading character by character using each_byte:
This method iterates over each character of the file.
f = File.new("nothing.txt", "r+")
f.each_byte {|char| #Perform operation }
e) Reading Line by Line a file:
For reading a file by line IO.readlines method is used that stores all the lines in an array: If our file has content
I am a rails developer.
I am a python developer.
I am a ruby developer.
Then this will work like this:
lines = IO.readlines("nothing.txt")
puts lines[0]
#=> I am a rails developer.
puts lines[1]
#=> I am a python developer.
puts lines[2]
#=> I am a ruby developer.
f) Writing Contents to File using write method:
Contents can be written to file using this:
File.open("FILE_PATH", 'w') { |file| file.write("your content") }
g) Other File Operations:
To rename a file rename method can be used like this:
# Rename a file from a1.txt to a2.txt
File.rename( "a1.txt", "a2.txt" )
To delete a file delete method can be used
# Delete a file a1.txt
File.delete("a1.txt")
Changing the mode/ownership
# Changing mode of file a.txt to mask value
file = File.new("a.txt", "w")
file.chmod( 0755 )
0 Comment(s)