Ruby предоставляет несколько способов работы с файлами через встроенный класс File
и модуль IO
. Рассмотрим основные операции с подробными примерами.
file = File.open("example.txt", "r") # Открытие для чтения
content = file.read
file.close # Важно не забыть закрыть файл
File.open("example.txt", "r") do |file|
content = file.read
# Файл автоматически закроется при выходе из блока
end
Режим | Описание |
---|---|
"r" | Только чтение (по умолчанию) |
"w" | Запись (перезаписывает файл) |
"a" | Добавление в конец файла |
"r+" | Чтение и запись |
"w+" | Чтение и запись (перезаписывает файл) |
"a+" | Чтение и добавление |
content = File.read("example.txt")
File.foreach("example.txt") do |line|
puts line
end
lines = File.readlines("example.txt")[0..4] # Первые 5 строк
File.write("output.txt", "Новое содержимое")
File.open("output.txt", "a") do |file|
file.puts "Новая строка в конце файла"
end
lines = ["строка 1", "строка 2", "строка 3"]
File.write("lines.txt", lines.join("\n"))
if File.exist?("example.txt")
puts "Файл существует"
end
puts File.size("example.txt") # Размер в байтах
puts File.mtime("example.txt") # Время последнего изменения
puts File.extname("image.jpg") # Расширение файла (.jpg)
puts File.join("folder", "subfolder", "file.txt") # folder/subfolder/file.txt
puts File.dirname("/path/to/file.txt") # /path/to
puts File.basename("/path/to/file.txt") # file.txt
Для работы с бинарными данными нужно использовать соответствующий режим:
# Чтение бинарного файла
data = File.binread("image.png", mode: "rb")
# Запись бинарного файла
File.binwrite("copy.png", data, mode: "wb")
Ruby предоставляет удобные методы для работы с временными файлами:
require 'tempfile'
temp_file = Tempfile.new('prefix')
temp_file.write("временные данные")
temp_file.close
# Файл автоматически удалится при сборке мусора
File.open
с do...end
для автоматического закрытияbegin
File.read("missing.txt")
rescue Errno::ENOENT => e
puts "Файл не найден: #{e.message}"
end
File.read
File.join
вместо ручного соединения путейRuby предоставляет богатый набор методов для файлового ввода-вывода через класс File
и модуль IO
. Основные операции включают чтение, запись, добавление данных, работу с метаданными и путями. Для безопасной работы с файлами рекомендуется использовать блочную форму File.open
и обработку исключений. Для сложных сценариев можно использовать дополнительные библиотеки типа Pathname
для работы с путями или CSV
для специализированных форматов.