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.