English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Ruby предоставляет набор методов ввода-вывода, реализованных в модуле ядра (Kernel). Все методы ввода-вывода происходят от класса IO.
класс IO Предоставляет все базовые методы, такие как read, write, gets, puts, readline, getc и printf.
Эта глава расскажет о всех базовых функциях ввода-вывода в Ruby. Для получения дополнительной информации о функциях обратитесь к документации Ruby. IO класс.
В предыдущих главах вы назначали значения переменным, а затем использовали puts Эта команда выводит информацию.
puts Эта команда указывает программе показать значение, хранящееся в переменной. Это добавит новую строку в конце каждого сообщения.
#!/usr/bin/ruby val1 = "Это переменная one" val2 = "Это переменная two" puts val1 puts val2
Результат выполнения примеров выше:
Это переменная one Это переменная two
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
и puts Предложение отличается отputs Предложение выводит целую строку на экран, в то время как putc Предложение может быть использовано для последовательного вывода символа.
Вывод кода следующий только символ H:
#!/usr/bin/ruby str="Hello Ruby!" putc str
Результат выполнения примеров выше:
H
print Предложение с puts Предложение类似. Единственное различие в том puts Когда используется предложение print, курсор переходит на следующую строку, а с помощью print Когда используется предложение print, курсор остается на той же строке.
#!/usr/bin/ruby print "Hello World" print "Good Morning"
Результат выполнения примеров выше:
Hello WorldGood Morning
До сих пор вы уже читали и писали в стандартный ввод и вывод. Теперь посмотрим, как работать с реальными данными файла.
puts Dir.pwd # возвращает текущий каталог, например /usr/bin File.new Метод для создания File Объект используется для чтения, записи или чтения и записи, права доступа зависят от параметра mode. В конце концов, вы можете использовать File.close Метод для закрытия файла.
aFile = File.new("filename", "mode") # ... обработка файла aFile.close
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 файл можно открыть в любом режиме. Например:
Вот входной текстовый файл:
Это простая текстовый файл для тестирования.
Теперь давайте попробуем прочитать этот файл:
#!/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 файл необходимо открыть в режиме записи. Например:
#!/usr/bin/ruby aFile = File.new("input.txt", "r+") if aFile aFile.syswrite("ABCDEF") else puts "Unable to open file!" puts entry
Эта команда записывает "ABCDEF" в файл.
Этот метод относится к классу 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...
класс 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] - вторую строку файла.
Этот метод также возвращает вывод построчно. Метод 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 маска, для владельца |
0400 | r, для владельца |
0200 | w, для владельца |
0100 | x, для владельца |
0070 | рwx маска, для группы, к которой принадлежит |
0040 | r, для группы, к которой принадлежит |
0020 | w, для группы, к которой принадлежит |
0010 | x, для группы, к которой принадлежит |
0007 | рwx маска, для других пользователей |
0004 | r, для других пользователей |
0002 | w, для других пользователей |
0001 | x, для других пользователей |
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 提供了处理文件和目录的方式。File Все файлы включены в каталог, Ruby предоставляет методы для обработки файлов и каталогов.File класс для обработки файлов.
класс для обработки каталогов. Для изменения каталога в 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.mkdir
может быть использован для создания каталога:
Dir.mkdir("mynewdir")
Вы также можете установить права доступа с помощью mkdir в новом каталоге (не в существующем каталоге):Внимание:
Маска 755 устанавливает права доступа для владельца (owner), группы (group) и всех (world [anyone]), rwxr-xr-x, где r = read чтение, w = write写入, x = execute выполнение.
Удаление папки Dir.deleteможет быть использован для удаления папок. и Dir.unlink Dir.rmdir
выполняет аналогичную функцию, предоставляя удобство.
Создание файлов и временных папок
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: