Das beste Ruby Datei Eingangs- und Ausgangs-Tutorial im Jahr 2024. In diesem Tutorial können Sie stelltAussage,bekommtStatement,putcAussage,print- Anweisungen,Öffnen und Schließen von Dateien,Das Lesen und Schreiben von Dateien,Umbenennen und Löschen von Dateien,File-Modus und Eigentum,Document Access,Ruby-Verzeichnis,Erstellen Sie ein temporäres Verzeichnis File &,Eingebaute Funktionen, lernen
Rubin bietet eine Reihe von I / O-Verfahren, in dem Kernel (Kernel) Modul implementiert. Alle I / O-Methode wird von der IO-Klasse abgeleitet.
IOliefert alle klassenbasierten Ansatz, wieLesen, Schreiben, bekommt, Puts,Readline-, getc undprintf.
In diesem Abschnitt werden alle verfügbaren Rubin-basierte I / O-Funktionen erklären. Weitere Funktionen finden Sie in RubyIO- Klasse.
Im vorigen Abschnitt, Sie zu einer Variablen zugewiesen, und verwenden Sie dann denPutsAussage Ausdruck.
stelltAnweisung gibt an, dass das Programm die Werte in den Variablen gespeichert anzeigt. Dies wird eine neue Zeile am Ende jeder Zeile hinzufügen.
#!/usr/bin/ruby val1 = "This is variable one" val2 = "This is variable two" puts val1 puts val2
Führen Sie das obige Beispiel Ausgabe lautet:
This is variable one This is variable two
erhältAnweisung verwendet werden können Benutzereingaben aus dem Standardbild STDIN zu erhalten.
Der folgende Code zeigt, wie bekommt Anweisung. Der Code wird der Benutzer aufgefordert, einen Wert einzugeben, die in der Variablen val gespeichert wird, wird das Finale am STDOUT gedruckt werden.
#!/usr/bin/ruby puts "Enter a value :" val = gets puts val
Führen Sie das obige Beispiel Ausgabe lautet:
Enter a value : This is entered value This is entered value
Undstellteine andere Anweisung,legtdie Anweisung , um die Ausgabe der ganzen Zeichenfolgen den Bildschirm, währendputcAnweisung kann eine Zeichenfolge ausgegeben werden.
Der Ausgang des folgenden Codes nur Zeichen H:
#!/usr/bin/ruby str="Hello Ruby!" putc str
Führen Sie das obige Beispiel Ausgabe lautet:
H
print- Anweisungen undstellteine ähnliche Aussage. Der einzige Unterschied ist , dass nach der Aussagesetztdie Ausgabe in die nächste Zeile zu springen, während die Verwendung vonprint- Anweisung, wird der Cursor auf der gleichen Linie positioniert ist.
#!/usr/bin/ruby print "Hello World" print "Good Morning"
Führen Sie das obige Beispiel Ausgabe lautet:
Hello WorldGood Morning
Ab sofort müssen Sie in der Standard-Ein- und Ausgabe lesen und schreiben. Jetzt werden wir an, wie die eigentlichen Daten-Dateien zu suchen.
Sie können einFile- Objekt wird angelegtFile.newMethode, schreiben oder zu lesen und zu schreiben, lesen und schreiben Berechtigungen je nach Modus Parameter zu lesen. Schließlich können SieFile.closeMethode zum Schließen der Datei verwenden.
aFile = File.new("filename", "mode") # de. 处理文件 aFile.close
Sie können ein neues Dateiobjekt mitFile.openMethode zu erstellen, und das Objekt in die Datei Datei zugeordnet ist. Jedoch gibt es einen Unterschied zwischenFile.openundFile.newMethoden. Der Unterschied ist ,File.openVerfahren kann mit dem Block zugeordnet werden, aber nichtFile.newMethode.
File.open("filename", "mode") do |aFile| # de. process the file end
Die folgende Tabelle listet die geöffneten Dateien in verschiedenen Modi:
模式 | 描述 |
---|---|
r | 只读模式。文件指针被放置在文件的开头。这是默认模式。 |
r+ | 读写模式。文件指针被放置在文件的开头。 |
w | 只写模式。如果文件存在,则重写文件。如果文件不存在,则创建一个新文件用于写入。 |
w+ | 读写模式。如果文件存在,则重写已存在的文件。如果文件不存在,则创建一个新文件用于读写。 |
a | 只写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于写入。 |
a+ | 读写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于读写。 |
Das Verfahren zum einfachen I / O kann auch für alle Dateiobjekte verwendet werden. So bekommt liest eine Zeile von derStandardeingabeliest aFile.gets aFile eine Zeile aus dem Dateiobjekt.
Allerdings, I / O-Objekt stellt einen zusätzlichen Satz von Zugriffsmethoden, bietet uns Komfort.
Sie können die Methodesysreadverwenden Sie den Inhalt der Datei zu lesen. Wenn die Methode sysread verwenden, können Sie eine beliebige Modus verwenden, um die Datei zu öffnen. Zum Beispiel:
Im Folgenden ist der Eingabetextdatei:
This is a simple text file for testing purpose.
Nun wollen wir versuchen, die Datei zu lesen:
#!/usr/bin/ruby aFile = File.new("input.txt", "r") if aFile content = aFile.sysread(20) puts content else puts "Unable to open file!" end
Diese Erklärung wird die ersten 20 Zeichen der Datei eingeben. Der Dateizeiger wird in einer Position in der Datei 21 Zeichen platziert werden.
Sie können die Methodesyswriteverwenden , um die Datei zu schreiben. Wenn die Methode syswrite verwenden, müssen Sie die Datei im Schreibmodus zu öffnen. Zum Beispiel:
#!/usr/bin/ruby aFile = File.new("input.txt", "r+") if aFile aFile.syswrite("ABCDEF") else puts "Unable to open file!" end
Die Anweisungen werden geschrieben "ABCDEF" in einer Datei.
Diese Methode gehört zu der KlasseDatei.Each_byte iteratives Verfahren ist jedes Zeichen in String können. Betrachten Sie die folgenden Code-Beispiele:
#!/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!" end
Einer nach dem anderen Zeichen Variable ch vergangen, und dann auf dem Bildschirm angezeigt, wie unten dargestellt:
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.ede.
File- Klasse ist eine Unterklasse der Klasse IO. IO-Klasse hat auch einige Methoden für die Dateien zu manipulieren.
IO.readlinesist IO - Klasse eine Methode. Die progressive Methode gibt den Inhalt der Datei. Der folgende Code zeigt ein VerfahrenIO.readlinesverwenden:
#!/usr/bin/ruby arr = IO.readlines("input.txt") puts arr[0] puts arr[1]
In diesem Code ist die Variable ein Array arr. Jede Zeile ist ein Array arr Dateiinput.txtein Element. Daher arr [0] wird die erste Zeile enthalten, und arr [1] wird die zweite Zeile der Datei enthalten.
Die Methode gibt auch progressive Ausgabe.Foreachzwischen verschiedenen Methoden und Verfahren ist Verfahrenreadlinesforeach Block zugeordnet. Doch im Gegensatz zu dem VerfahrenLeseleitungen,foreach Methode anstelle einer Anordnung zurückzukehren. Zum Beispiel:
#!/usr/bin/ruby IO.foreach("input.txt"){|block| puts block}
Dieser Code wird der Inhalt der Datei übergebene Variable progressive Block zutesten,dann wird die Ausgabe auf dem Bildschirm angezeigt werden.
Sie können umbenennen und löschen Sie Dateienumbenennenund Methodenlöschen.
Das folgende Beispiel benennt eine Datei , die bereitstest1.txtvorhanden ist:
#!/usr/bin/ruby # 重命名文件 test1.txt 为 test2.txt File.rename( "test1.txt", "test2.txt" )
Das folgende Beispiel eine vorhandene Dateitest2.txtzulöschen:
#!/usr/bin/ruby # 删除文件 test2.txt File.delete("text2.txt")
Verwenden Siechmoddie Methode mit einem Maskenmuster oder Dateiberechtigungen / Zugriffsliste zu ändern:
Beispiele für die folgenden Änderungen an einer bestehenden Dateitest.txtModell für einen Maskenwert:
#!/usr/bin/ruby file = File.new( "test.txt", "w" ) file.chmod( 0755 )
Die folgende Tabelle listet die verschiedenen MaskenchmodVerfahren verwendet werden können:
掩码 | 描述 |
---|---|
0700 | rwx 掩码,针对所有者 |
0400 | r ,针对所有者 |
0200 | w ,针对所有者 |
0100 | x ,针对所有者 |
0070 | rwx 掩码,针对所属组 |
0040 | r ,针对所属组 |
0020 | w ,针对所属组 |
0010 | x ,针对所属组 |
0007 | rwx 掩码,针对其他人 |
0004 | r ,针对其他人 |
0002 | w ,针对其他人 |
0001 | x ,针对其他人 |
4000 | 执行时设置用户 ID |
2000 | 执行时设置所属组 ID |
1000 | 保存交换文本,甚至在使用后也会保存 |
Mit dem folgenden Befehl die Datei zu überprüfen, bevor die Datei bereits vorhanden Eröffnung:
#!/usr/bin/ruby File.open("file.rb") if File::exists?( "file.rb" )
Der folgende Befehl zur Abfrage, ob die Datei wirklich eine Datei:
#!/usr/bin/ruby # 返回 true 或false File.file?( "text.txt" )
Nach Befehl, ob die angegebene Datei zu überprüfen ist ein Verzeichnis:
#!/usr/bin/ruby # 一个目录 File::directory?( "/usr/local/bin" ) # => true # 一个文件 File::directory?( "file.rb" ) # => false
Sind Sie den folgenden Befehl die Datei lesbar, beschreibbar, ausführbare Datei zu überprüfen:
#!/usr/bin/ruby File.readable?( "test.txt" ) # => true File.writable?( "test.txt" ) # => true File.executable?( "test.txt" ) # => false
Der folgende Befehl prüft die Dateigröße auf Null:
#!/usr/bin/ruby File.zero?( "test.txt" ) # => true
Der folgende Befehl gibt die Größe der Datei:
#!/usr/bin/ruby File.size?( "text.txt" ) # => 1002
Der folgende Befehl wird verwendet, um die Art der Datei zu überprüfen:
#!/usr/bin/ruby File::ftype( "test.txt" ) # => file
ftype Methode gibt einen Wert des folgenden die Art derDateizuidentifizieren: Datei, Verzeichnis, characterSpecial, blockSpecial, Fifo, Link, Buchseoder unbekanntist.
Der folgende Befehl wird verwendet, um die Datei zu überprüfen, wurde erstellt, geändert oder letzten Zugriffszeit:
#!/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
Alle Dateien im Verzeichnis enthalten sind, bietet Ruby eine Prozess-Dateien und Verzeichnisse.Datei- Klassen für die Arbeit mitDateien,Dir Klassen für Arbeitsverzeichnis.
Um das Verzeichnis in dem Programm Rubin zu ändern, benutzen Sie bitteDir.chdir.Beispiele für die folgenden Änderungen in das aktuelle Verzeichnis/ usr / bin.
Dir.chdir("/usr/bin")
Sie können das aktuelle VerzeichnisDir.pwd anzuzeigen:
puts Dir.pwd # 返回当前目录,类似 /usr/bin
Sie können mitDir.entrieseine Liste von Dateien und Verzeichnisse innerhalb eines angegebenen Verzeichnis erhalten:
puts Dir.entries("/usr/bin").join(' ')
Dir.entriesgibt ein Array alle das angegebene Verzeichnis enthält.Dir.foreachbietet die gleiche Funktionalität:
Dir.foreach("/usr/bin") do |entry| puts entry end
Holen Sie sich ein Verzeichnis-Liste von einem prägnanten Art und Weise ist eine Methode, durch die Dir Klasse Array mit:
Dir["/usr/bin/*"]
Dir.mkdirkann das Verzeichnis zu erstellen verwendet werden:
Dir.mkdir("mynewdir")
Sie können einstellen, auch die Berechtigungen für das neue Verzeichnis (nicht vorhandene Verzeichnis) angenommen mkdir:
Hinweis: Maske 755 Set Besitzer (Eigentümer), gehört zu der Gruppe (Gruppe), alle (Welt [jedermann]) Berechtigungen rwxr-xr-x, wobei r = lesen lesen, w = schreiben , schreiben, x = ausführen Ausführung.
Dir.mkdir( "mynewdir", 755 )
Dir.deleteverwendet werden Verzeichnisse zu löschen.Dir.unlinkundDir.rmdirdie gleiche Funktion, bietet uns Komfort.
Dir.delete("testdir")
Temporäre Dateien werden erstellt, die einfach in den Prozess der Durchführung des Programms sind, aber nicht dauerhaft gespeicherten Informationen.
Dir.tmpdirstellt einen Pfad auf dem aktuellen System temporäre Verzeichnis, das standardmäßig, aber nicht verfügbar ist. UmDir.tmpdirzur Verfügung, mit der erforderlichen 'tmpdir' notwendig.
Sie könnenDir.tmpdirundFile.joinverwendet zusammen , um eine plattformunabhängige , temporäre Dateien zu erstellen:
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)
Dieser Code erstellt eine temporäre Datei, in der Daten zu schreiben, und dann die Datei zu löschen. Ruby - Standard - Bibliothek enthält auch eine Bibliothek mit dem NamenTempfileder Bibliothek kann verwendet werden , um eine temporäre Datei zu erstellen:
require 'tempfile' f = Tempfile.new('tingtong') f.puts "Hello" puts f.path f.close
Nachfolgend finden Sie eine vollständige Liste der Dateien und Verzeichnisse in Ruby eingebauten Funktionen: