English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby базовый курс

Ruby продвинутый курс

Вход и выход файлов Ruby

Ruby предоставляет набор методов ввода-вывода, реализованных в модуле ядра (Kernel). Все методы ввода-вывода происходят от класса IO.

класс IO Предоставляет все базовые методы, такие как read, write, gets, puts, readline, getc и printf.

Эта глава расскажет о всех базовых функциях ввода-вывода в Ruby. Для получения дополнительной информации о функциях обратитесь к документации Ruby. IO класс.

puts Предложение

В предыдущих главах вы назначали значения переменным, а затем использовали puts Эта команда выводит информацию.

puts Эта команда указывает программе показать значение, хранящееся в переменной. Это добавит новую строку в конце каждого сообщения.

在线示例

#!/usr/bin/ruby
 
val1 = "Это переменная one"
val2 = "Это переменная two"
puts val1
puts val2

Результат выполнения примеров выше:

Это переменная one
Это переменная two

gets Предложение

gets Слова могут быть использованы для получения ввода от стандартного экрана, называемого STDIN.

在线示例

Следующий код демонстрирует, как использовать предложение gets. Этот код будет запрашивать у пользователя вводить значение, которое будет храниться в переменной val и в конце будет напечатано на STDOUT.

在线示例

#!/usr/bin/ruby
 
puts "Enter a value :"
val = gets
puts val

Результат выполнения примеров выше:

Enter a value :
This is entered value
This is entered value

putc Предложение

и puts Предложение отличается отputs Предложение выводит целую строку на экран, в то время как putc Предложение может быть использовано для последовательного вывода символа.

在线示例

Вывод кода следующий только символ H:

在线示例

#!/usr/bin/ruby
 
str="Hello Ruby!"
putc str

Результат выполнения примеров выше:

H

print Предложение

print Предложение с puts Предложение类似. Единственное различие в том puts Когда используется предложение print, курсор переходит на следующую строку, а с помощью print Когда используется предложение print, курсор остается на той же строке.

在线示例

#!/usr/bin/ruby
 
print "Hello World"
print "Good Morning"

Результат выполнения примеров выше:

Hello WorldGood Morning

Открытие и закрытие файла

До сих пор вы уже читали и писали в стандартный ввод и вывод. Теперь посмотрим, как работать с реальными данными файла.

File.new метод

puts Dir.pwd # возвращает текущий каталог, например /usr/bin File.new Метод для создания File Объект используется для чтения, записи или чтения и записи, права доступа зависят от параметра mode. В конце концов, вы можете использовать File.close Метод для закрытия файла.

Грамматика

aFile = File.new("filename", "mode")
   # ... обработка файла
aFile.close

File.open метод

puts Dir.pwd # возвращает текущий каталог, например /usr/bin File.open Метод создает новый объект file и assigns этот объект файлу. Однако,File.open и File.new Методы имеют некоторые различия. Разница в том File.open Метод может быть связан с блоком, а File.new Метод не может.

File.open("filename", "mode") do |aFile|
   # ... обработка файла
puts entry

В таблице ниже перечислены различные режимы открытия файла:

РежимОписание
rТолько чтение. Указатель файла ставится в начало файла. Это режим по умолчанию.
r+Режим чтения и записи. Указатель файла ставится в начало файла.
wТолько запись. Если файл существует, файл будет перезаписан. Если файл не существует, создается новый файл для записи.
w+Режим чтения и записи. Если файл существует, существующий файл будет перезаписан. Если файл не существует, создается новый файл для чтения и записи.
aТолько запись. Если файл существует, указатель файла ставится в конец файла. То есть, файл находится в режиме записи. Если файл не существует, создается новый файл для записи.
a+Режим чтения/записи. Если файл существует, указатель файла устанавливается в конец файла. То есть, это режим дополнения. Если файл не существует, создается новый файл для чтения и записи.

Чтение и запись файла

Методы для простого I/O можно использовать с любыми объектами file. Таким образом, gets читает строку из стандартного ввода.aFile.gets Чтение строки из файла объекта aFile.

Однако, объекты I/O предоставляют дополнительные настройки для доступа к методам, что делает их удобными для использования.

sysread метод

Вы можете использовать метод sysread для чтения содержимого файла. При использовании метода sysread файл можно открыть в любом режиме. Например:

Вот входной текстовый файл:

Это простая текстовый файл для тестирования.

Теперь давайте попробуем прочитать этот файл:

在线示例

#!/usr/bin/ruby
 
aFile = File.new("input.txt", "r")
if aFile
   content = aFile.sysread(20)
   puts content
else
   puts "Unable to open file!"
puts entry

Эта команда записывает первые 20 символов из файла. Индекс указателя файла будет установлен на 21-м символе файла.

syswrite метод

Вы можете использовать метод syswrite для записи содержимого файла. При использовании метода syswrite файл необходимо открыть в режиме записи. Например:

在线示例

#!/usr/bin/ruby
 
aFile = File.new("input.txt", "r+")
if aFile
   aFile.syswrite("ABCDEF")
else
   puts "Unable to open file!"
puts entry

Эта команда записывает "ABCDEF" в файл.

each_byte метод

Этот метод относится к классу Fileметод each_byte является iterable, который позволяет итерировать каждый символ строки. Вот пример кода:

在线示例

#!/usr/bin/ruby
 
aFile = File.new("input.txt", "r+")
if aFile
   aFile.syswrite("ABCDEF")
   aFile.rewind
   aFile.each_byte {|ch| putc ch; putc ?; }
else
   puts "Unable to open file!"
puts entry

Знаки一个个传送到 переменной ch, а затем выводятся на экран, как показано ниже:

A.B.C.D.E.F.s. .a. .s.i.m.p.l.e. .t.e.x.t. .f.i.l.e. .f.o.r. .t.e.s.t.i.n.g. .p.u.r.p.o.s.e...

IO.readlines метод

класс File Это подкласс класса IO. Класс IO также имеет методы для работы с файлами

IO.readlines Это метод из класса IO. Этот метод逐行 возвращает содержимое файла. Ниже приведен пример кода метода IO.readlines использование:

在线示例

#!/usr/bin/ruby
 
arr = IO.readlines("input.txt")
puts arr[0]
puts arr[1]

В этом коде переменная arr является массивом. Файл input.txt каждый строка будет элементом массива arr. Таким образом, arr[0] будет содержать первую строку, а arr[1] - вторую строку файла.

IO.foreach метод

Этот метод также возвращает вывод построчно. Метод foreach и метод readlines между ними, метод foreach ассоциирован с блоком. Но, в отличие от метода readlinesметод foreach Не возвращает массив. Например:

在线示例

#!/usr/bin/ruby
 
IO.foreach("input.txt"){|block| puts block}

Этот код будет передавать файл test Содержимое файла передается построчно переменной block, и вывод будет отображаться на экране.

Переименование и удаление файла

Dir.chdir("/usr/bin") rename и delete Метод переименования и удаления файла.

Ниже приведен пример переименования существующего файла test1.txt:

在线示例

#!/usr/bin/ruby
 
# Переименование файла test1.txt в test2.txt
File.rename("test1.txt", "test2.txt")

Ниже приведен пример удаления существующего файла test2.txt:

在线示例

#!/usr/bin/ruby
 
# Удаление файла test2.txt
File.delete("text2.txt")

Файловой модели и собственности

Использование с маской chmod Метод для изменения режима или прав/списка доступа к файлу:

Ниже приведен пример изменения существующего файла test.txt моделируется как значение маски:

在线示例

#!/usr/bin/ruby
 
file = File.new("test.txt", "w")
file.chmod(0755)

В таблице ниже приведены: chmod Различные маски, доступные в методе:

МаскаОписание
0700рwx маска, для владельца
0400r, для владельца
0200w, для владельца
0100x, для владельца
0070рwx маска, для группы, к которой принадлежит
0040r, для группы, к которой принадлежит
0020w, для группы, к которой принадлежит
0010x, для группы, к которой принадлежит
0007рwx маска, для других пользователей
0004r, для других пользователей
0002w, для других пользователей
0001x, для других пользователей
4000В процессе выполнения устанавливается идентификатор пользователя
2000执行时设置所属组 ID
1000保存交换文本,甚至在使用后也会保存

文件查询

下面的命令在打开文件前检查文件是否已存在:

在线示例

#!/usr/bin/ruby
 
File.open("file.rb") if File::exists?("file.rb")

下面的命令查询文件是否确实是一个文件:

在线示例

#!/usr/bin/ruby
 
# 返回 true или false
File.file?("text.txt")

下面的命令检查给定的文件名是否是一个目录:

在线示例

#!/usr/bin/ruby
 
# 一个目录
File::directory?("/usr/local/bin") # => true
 
# 一个文件
File::directory?("file.rb") # => false

下面的命令检查文件是否可读、可写、可执行:

在线示例

#!/usr/bin/ruby
 
File.readable?("test.txt") # => true
File.writable?("test.txt") # => true
File.executable?("test.txt") # => false

下面的命令检查文件是否大小为零:

在线示例

#!/usr/bin/ruby
 
File.zero?("test.txt") # => true

下面的命令返回文件的大小:

在线示例

#!/usr/bin/ruby
 
File.size?("text.txt") # => 1002

下面的命令用于检查文件的类型:

在线示例

#!/usr/bin/ruby
 
File::ftype("test.txt") # => file

ftype метод через возврат одного из следующих значений определяет тип файла:file、 directory、 characterSpecial、 blockSpecial、 fifo、 link、 socket или unknown.

下面的命令用于检查文件被创建、修改或最后访问的时间:

在线示例

#!/usr/bin/ruby
 
File::ctime("test.txt") # => Fri May 09 10:06:37 -0700 2008
File::mtime("text.txt") # => Fri May 09 10:44:44 -0700 2008
File::atime("text.txt") # => Fri May 09 10:45:01 -0700 2008

Ruby 中的目录

所有的文件都是包含在目录中,Ruby 提供了处理文件和目录的方式。File Все файлы включены в каталог, Ruby предоставляет методы для обработки файлов и каталогов.File класс для обработки файлов.

Dir

класс для обработки каталогов. Для изменения каталога в Ruby-программе используйтеDir.chdir .Ниже приведен пример, который изменяет текущий каталог на.

/usr/bin

Dir.chdir("/usr/bin") Вы можете изменить текущий каталог с помощью Dir.pwd

Просмотр текущего каталога:

puts Dir.pwd # возвращает текущий каталог, например /usr/bin puts Dir.entries("/usr/bin").join(' ') Вы можете использовать

Получение списка файлов и папок в указанном каталоге:

puts Dir.entries("/usr/bin").join(' ') Dir.entriesвозвращает массив, содержащий все элементы в указанном каталоге. Dir.foreach

предоставляет аналогичные функции:
   Dir.foreach("/usr/bin") do |entry|
puts entry

end

более простым способом получения списка каталогов является использование массивных методов класса Dir:

Dir["/usr/bin/*"]

Создание каталога Dir.mkdir

может быть использован для создания каталога:

Dir.mkdir("mynewdir")

Вы также можете установить права доступа с помощью mkdir в новом каталоге (не в существующем каталоге):Внимание:

Маска 755 устанавливает права доступа для владельца (owner), группы (group) и всех (world [anyone]), rwxr-xr-x, где r = read чтение, w = write写入, x = execute выполнение.

Dir.mkdir( "mynewdir", 755 )

Удаление папки Dir.deleteможет быть использован для удаления папок. и Dir.unlink Dir.rmdir

выполняет аналогичную функцию, предоставляя удобство.

Dir.delete("testdir")

Создание файлов и временных папок

Dir.tmpdir временные файлы - это информация, которая просто создается в процессе выполнения программы, но не хранится永久но. Dir.tmpdir доступно, использование必需емого 'tmpdir' обязательно. Он предоставляет путь к текущей временной папке системы, но по умолчанию этот метод недоступен. Чтобы

Вы можете использовать Dir.tmpdir и File.join Используя их вместе, можно создать временный файл, независимый от платформы:

require 'tmpdir'
tempfilename = File.join(Dir.tmpdir, "tingtong")
tempfile = File.new(tempfilename, "w")
tempfile.puts "This is a temporary file"
tempfile.close
File.delete(tempfilename)

Этот код создает временный файл,写入数据到其中,然后 удаляет файл. Стандартная библиотека Ruby также включает библиотеку под названием Tempfile библиотеки, которая может использоваться для создания временных файлов:

require 'tempfile'
f = Tempfile.new('tingtong')
f.puts "Hello"
puts f.path
f.close

Внутренние функции

Ниже приведен полный список встроенных функций для обработки файлов и каталогов в Ruby: