File I/O (Input/Output) là một phần quan trọng trong lập trình, cho phép bạn đọc và ghi dữ liệu từ và vào các tệp tin. Ruby cung cấp nhiều phương thức và lớp để thực hiện các thao tác này một cách dễ dàng và hiệu quả. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về File I/O trong Ruby, bao gồm các chủ đề như puts, gets, putc, print, mở và đóng tệp, đọc và ghi tệp, và nhiều hơn nữa.
The puts Statement
Phương thức puts được sử dụng để in ra màn hình một chuỗi ký tự, với mỗi chuỗi được in trên một dòng mới. Đây là một trong những phương thức cơ bản nhất để xuất dữ liệu ra màn hình.
ruby
puts "Hello, World!"
puts "This is Ruby."
The gets Statement
Phương thức gets được sử dụng để đọc một dòng đầu vào từ người dùng. Nó chờ người dùng nhập dữ liệu và nhấn Enter, sau đó trả về chuỗi ký tự đã nhập.
ruby
puts "Enter your name:"
name = gets.chomp
puts "Hello, #{name}!"
The putc Statement
Phương thức putc được sử dụng để in ra một ký tự duy nhất. Nó không thêm ký tự dòng mới sau khi in.
ruby
putc "H"
putc "i"
# Output: Hi
The print Statement
Phương thức print tương tự như puts, nhưng nó không thêm ký tự dòng mới sau khi in.
ruby
print "Hello, "
print "World!"
# Output: Hello, World!
Opening and Closing Files
Để làm việc với tệp tin trong Ruby, bạn cần mở tệp trước khi đọc hoặc ghi, và đóng tệp sau khi hoàn thành. Ruby cung cấp hai phương thức chính để mở tệp: File.new và File.open.
The File.new Method
Phương thức File.new tạo một đối tượng tệp mới. Bạn có thể chỉ định chế độ mở tệp như đọc (r), ghi (w), hoặc thêm (a).
ruby
file = File.new("example.txt", "w")
file.puts "Hello, World!"
file.close
The File.open Method
Phương thức File.open tương tự như File.new, nhưng nó có thể được sử dụng với một khối lệnh. Khi sử dụng với khối lệnh, tệp sẽ tự động được đóng sau khi khối lệnh kết thúc.
ruby
File.open("example.txt", "w") do |file|
file.puts "Hello, World!"
end
Reading and Writing Files
Ruby cung cấp nhiều phương thức để đọc và ghi dữ liệu từ và vào tệp tin.
The sysread Method
Phương thức sysread đọc một số byte cụ thể từ tệp và trả về chúng dưới dạng chuỗi.
ruby
file = File.open("example.txt", "r")
content = file.sysread(20)
puts content
file.close
The syswrite Method
Phương thức syswrite ghi một chuỗi vào tệp.
ruby
file = File.open("example.txt", "w")
file.syswrite("Hello, World!")
file.close
The each_byte Method
Phương thức each_byte lặp qua từng byte trong tệp và thực hiện một khối lệnh cho mỗi byte.
ruby
File.open("example.txt", "r") do |file|
file.each_byte { |byte| puts byte }
end
The IO.readlines Method
Phương thức IO.readlines đọc toàn bộ tệp và trả về một mảng các dòng.
ruby
lines = IO.readlines("example.txt")
lines.each { |line| puts line }
The IO.foreach Method
Phương thức IO.foreach đọc từng dòng trong tệp và thực hiện một khối lệnh cho mỗi dòng.
ruby
IO.foreach("example.txt") { |line| puts line }
Renaming and Deleting Files
Ruby cung cấp các phương thức để đổi tên và xóa tệp.
Renaming Files
Phương thức File.rename được sử dụng để đổi tên tệp.
ruby
File.rename("example.txt", "new_example.txt")
Deleting Files
Phương thức File.delete được sử dụng để xóa tệp.
ruby
File.delete("new_example.txt")
File Modes and Ownership
Khi mở tệp, bạn có thể chỉ định chế độ mở tệp để xác định cách tệp sẽ được sử dụng.
"r": Chế độ đọc, tệp phải tồn tại."w": Chế độ ghi, tạo tệp mới hoặc ghi đè tệp hiện có."a": Chế độ thêm, thêm vào cuối tệp."r+": Chế độ đọc và ghi, tệp phải tồn tại."w+": Chế độ đọc và ghi, tạo tệp mới hoặc ghi đè tệp hiện có."a+": Chế độ đọc và thêm, thêm vào cuối tệp.
File Inquiries
Ruby cung cấp nhiều phương thức để kiểm tra thông tin về tệp.
File.exist?("filename"): Kiểm tra xem tệp có tồn tại hay không.File.size("filename"): Trả về kích thước của tệp.File.readable?("filename"): Kiểm tra xem tệp có thể đọc được hay không.File.writable?("filename"): Kiểm tra xem tệp có thể ghi được hay không.File.executable?("filename"): Kiểm tra xem tệp có thể thực thi được hay không.
Directories in Ruby
Ruby cung cấp lớp Dir để làm việc với thư mục.
Navigating Through Directories
Bạn có thể thay đổi thư mục làm việc hiện tại bằng phương thức Dir.chdir.
ruby
Dir.chdir("/path/to/directory")
puts Dir.pwd # In ra thư mục hiện tại
Creating a Directory
Phương thức Dir.mkdir được sử dụng để tạo thư mục mới.
ruby
Dir.mkdir("new_directory")
Deleting a Directory
Phương thức Dir.rmdir được sử dụng để xóa thư mục. Thư mục phải rỗng.
ruby
Dir.rmdir("new_directory")
Listing Files in a Directory
Phương thức Dir.entries trả về một mảng chứa tên các tệp và thư mục trong thư mục hiện tại.
ruby
entries = Dir.entries(".")
puts entries.inspect
Creating Files & Temporary Directories
Ruby cung cấp các phương thức để tạo tệp và thư mục tạm thời.
Creating Temporary Files
Bạn có thể sử dụng thư viện tempfile để tạo tệp tạm thời.
ruby
require 'tempfile'
tempfile = Tempfile.new('my_temp_file')
tempfile.puts "This is a temporary file."
tempfile.close
Creating Temporary Directories
Bạn có thể sử dụng thư viện tmpdir để tạo thư mục tạm thời.
ruby
require 'tmpdir'
Dir.mktmpdir do |dir|
puts "Temporary directory created at: #{dir}"
end
Kết luận
File I/O là một phần quan trọng trong lập trình Ruby, cung cấp nhiều phương thức và lớp để làm việc với tệp và thư mục. Bằng cách sử dụng các phương thức như puts, gets, putc, print, File.open, File.new, sysread, syswrite, each_byte, IO.readlines, IO.foreach, và các phương thức khác, bạn có thể thực hiện các thao tác đọc và ghi tệp một cách dễ dàng và hiệu quả. Hãy tiếp tục khám phá và thực hành với File I/O trong Ruby để trở thành một lập trình viên giỏi hơn.