Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Cách Đọc & Ghi File Trong Ruby: Hướng Dẫn Bước Đi Bước

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!

Cách Đọc & Ghi File Trong Ruby: Hướng Dẫn Bước Đi Bước

Đâ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:

  1. Mở file, với phương thức open.
  2. Đọc file, toàn bộ, từng dòng, hoặc số byte cụ thể.
  3. Đó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:

  1. Mở file chế độ ghi (cờ "w")
  2. Dùng phương thức write thêm dữ liệu
  3. 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!