Hôm nay bạn học đọc & ghi file Ruby để trích xuất nội dung, tạo file mới, tìm thông tin cần!

Đây là nội dung:
Mục Lục
- 1 Cách Đọc File Trong Ruby
- 2 Cách Ghi File Trong Ruby
- 3 Các Phương Thức File Ruby
- 4 Thao Thác Thư Mục
- 5 Cách Dùng Module FileUtils
- 6 Tóm Tắt
- 6.1 Related
Làm ngay!
Cách Đọc File Trong Ruby
Đọc file Ruby như sau:
- Mở file, với phương thức
open. - Đọc file, toàn bộ, từng dòng, hoặc số byte cụ thể.
- Đóng file, với phương thức
close.
Quy trình chi tiết.
Dùng lớp File mở file:
file = File.open("users.txt")
Kết quả nhận File object, chưa phải nội dung file.
Bây giờ:
Đọc nội dung file ba cách.
Thứ nhất, đọc toàn bộ file.
Như sau:
file_data = file.read # "user1\nuser2\nuser3\n"
Nếu file nhiều dòng có thể split file_data, hoặc dùng readlines cộng chomp bỏ ký tự xuống dòng.
Ví dụ:
file_data = file.readlines.map(&:chomp) # ["user1", "user2", "user3"]
Khi xong làm việc file muốn close giải phóng bộ nhớ & tài nguyên hệ thống.
Như sau:
file.close
Thay thế không phải mở & đóng file, dùng File.read:
file_data = File.read("user.txt").split # ["user1", "user2", "user3"]
Mẹo thêm đọc file.
Muốn xử lý file từng dòng, dùng foreach.
Ví dụ:
File.foreach("users.txt") { |line| puts line }
Thay vì đọc toàn bộ file vào bộ nhớ xử lý từng dòng, hữu ích file lớn.
Cách Ghi File Trong Ruby
Muốn ghi file Ruby:
- Mở file chế độ ghi (cờ "w")
- Dùng phương thức
writethêm dữ liệu - Nếu không dùng block version, nhớ
close
Ví dụ:
File.open("log.txt", "w") { |f| f.write "#{Time.now} - User logged in\n" }
Quan trọng:
Làm này ghi đè nội dung file trước!
Muốn thêm nội dung mới, dùng cờ "a" (append), thay "w" (write).
Shortcut dùng File.write:
File.write("log.txt", "data...")
Dùng phương thức này chế độ append:
File.write("log.txt", "data...", mode: "a")
Đó là cách dễ nhất ghi file Ruby chỉ một dòng code 🙂
Một điều nữa…
Muốn ghi mảng ra file phải chuyển thành chuỗi trước.
Cách làm:
File.write("log.txt", [1,2,3].join("\n"), mode: "a")
Quy trình chuyển đối tượng thành chuỗi gọi là serialization.
Các Phương Thức File Ruby
Làm được việc khác với file, ngoài đọc/ghi.
Ví dụ, muốn biết file tồn tại hoặc lấy danh sách file thư mục hiện tại.
Sẽ dùng phương thức như:
- rename
- size
- exist?
- extname
- basename
- dirname
- directory?
- file?
Xem vài ví dụ:
# Đổi tên file
File.rename("old-name.txt", "new-name.txt")
# Kích thước file tính bằng byte
File.size("users.txt")
# File này đã tồn tại?
File.exist?("log.txt")
# Lấy phần mở rộng file, hoạt động ngay cả file không tồn tại
File.extname("users.txt") # => ".txt"
# Lấy tên file không phần thư mục
File.basename("/tmp/ebook.pdf") # => "ebook.pdf"
# Lấy đường dẫn file, không tên file
File.dirname("/tmp/ebook.pdf") # => "/tmp"
# Đây thực sự file hay thư mục?
File.directory?("cats")
Ví dụ cuối có ý nghĩa hơn nếu lặp qua nội dung danh sách thư mục.
def find_files_in_current_directory
entries = Dir.entries(".")
entries.reject { |entry| File.directory?(entry) }
end
Cũng lấy stats file, như kích thước, quyền, ngày tạo, v.v:
File.stat("/tmp")
Thao Thác Thư Mục
Dùng Dir.glob lấy danh sách file khớp pattern.
Ví dụ:
# Tất cả file thư mục hiện tại
Dir.glob("*")
# Tất cả file chứa "spec" trong tên
Dir.glob("*spec*")
# Tất cả file ruby
Dir.glob("*.rb")
Một dòng code đệ quy liệt kê tất cả file Ruby, bắt đầu từ thư mục hiện tại:
Dir.glob("**/**")
Dùng nếu chỉ tìm thư mục:
Dir.glob("**/**/")
Dùng lớp Dir in thư mục làm việc hiện tại:
Dir.pwd
Kiểm tra thư mục rỗng:
Dir.empty?("/tmp") # false
Kiểm tra thư mục tồn tại:
Dir.exist?("/home/jesus") # true
Tạo thư mục mới:
Dir.mkdir("/tmp/testing")
Tạo thư mục tạm mktmpdir:
Dir.mktmpdir do |dir|
File.write(dir + "/log.txt", "test")
end
Cách Dùng Module FileUtils
Có tiện ích xử lý file thêm trong module FileUtils.
Ví dụ, so sánh file, touch file (cập nhật lần truy cập & sửa đổi cuối), sao chép file & thư mục với cp_r.
Như sau:
require 'fileutils'
FileUtils.compare_file("a.txt", "b.txt")
FileUtils.touch("/tmp/lock")
FileUtils.cp_r("data", "backup")
Btw chữ "r" trong cp_r là "recursive" (đệ quy).
Tóm Tắt
Bạn học quản lý file & thư mục Ruby dùng phương thức built-in như File.read & File.write.
Cảm ơn đã đọc!