English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Ruby fornisce una serie completa di metodi di I/O implementati nel modulo Kernel. Tutti i metodi di I/O derivano dalla classe IO.
Classe IO Fornisce tutti i metodi di base, come read, write, gets, puts, readline, getc 和 printf.
Questa sezione spiega tutte le funzioni di base di I/O disponibili in Ruby. Per ulteriori funzioni, consulta il manuale di Ruby. IO di classe.
Nelle sezioni precedenti, assegni un valore alle variabili e poi utilizzi puts La frase stampa l'output.
puts La frase indica che il programma visualizzi il valore memorizzato nella variabile. Questo aggiungerà una nuova riga alla fine di ogni riga.
#!/usr/bin/ruby val1 = "Questo è il variabile uno" val2 = "Questo è il variabile due" puts val1 puts val2
I risultati di esecuzione degli esempi sopra elencati sono:
Questo è il variabile uno Questo è il variabile due
gets La frase può essere utilizzata per ottenere l'input utente dalla schermata standard denominata STDIN.
Il codice seguente dimostra come utilizzare la sentenza gets. Il codice chiede all'utente di inserire un valore, che viene memorizzato nella variabile val e infine stampato sullo STDOUT.
#!/usr/bin/ruby puts "Inserisci un valore :" val = gets puts val
I risultati di esecuzione degli esempi sopra elencati sono:
Inserisci un valore : This is entered value This is entered value
Con puts La sentenza è diversa,puts La sentenza esporta l'intera stringa sullo schermo, mentre putc La sentenza può essere utilizzata per esportare un carattere alla volta.
L'output del codice seguente è solo il carattere H:
#!/usr/bin/ruby str="Hello Ruby!" putc str
I risultati di esecuzione degli esempi sopra elencati sono:
H
print La sentenza con puts La sentenza è simile. L'unica differenza è puts La sentenza salta alla riga successiva dopo aver eseguito il contenuto di output, mentre print Quando si esegue la sentenza, il cursore si posiziona sulla stessa riga.
#!/usr/bin/ruby print "Hello World" print "Good Morning"
I risultati di esecuzione degli esempi sopra elencati sono:
Hello WorldGood Morning
Fino ad ora, avete letto e scritto sugli input e output standard. Ora, vediamo come operare su file dati reali.
您可以使用 File.new Il metodo per creare un File L'oggetto viene utilizzato per leggere, scrivere o leggere/scrivere, i permessi di lettura/scrittura dipendono dal parametro mode. Infine, è possibile utilizzare File.close Il metodo per chiudere il file.
aFile = File.new("filename", "mode") # ... elaborare il file aFile.close
您可以使用 File.open Il metodo crea un nuovo oggetto file e assegna questo oggetto file al file. Tuttavia,File.open 和 File.new I metodi hanno alcune differenze. La differenza è File.open Il metodo può essere associato al blocco, mentre File.new Il metodo non può.
File.open("filename", "mode") do |aFile| # ... elaborare il file end
La tabella seguente elenca le diverse modalità di apertura dei file:
Modalità | Descrizione |
---|---|
r | Modalità di sola lettura. Il puntatore del file viene posizionato all'inizio del file. Questa è la modalità predefinita. |
r+ | Modalità di lettura/scrittura. Il puntatore del file viene posizionato all'inizio del file. |
w | Modalità di scrittura. Se il file esiste, viene sovrascritto il file. Se il file non esiste, viene creato un nuovo file per la scrittura. |
w+ | Modalità di lettura/scrittura. Se il file esiste, viene sovrascritto il file esistente. Se il file non esiste, viene creato un nuovo file per la lettura e la scrittura. |
a | Modalità di scrittura. Se il file esiste, il puntatore del file viene posizionato alla fine del file. Questo significa che il file è in modalità di appendimento. Se il file non esiste, viene creato un nuovo file per la scrittura. |
a+ | Modalità di lettura e scrittura. Se il file esiste, il puntatore del file viene posizionato alla fine del file. Questo significa che il file è in modalità append. Se il file non esiste, viene creato un nuovo file per la lettura e la scrittura. |
I metodi per I/O semplice possono essere utilizzati per tutti gli oggetti file. Quindi, gets legge una riga dall'input standard,aFile.gets Leggi una riga dall'oggetto del file aFile.
Tuttavia, gli oggetti I/O forniscono impostazioni aggiuntive per i metodi di accesso, rendendo più comodo.
Puoi usare il metodo sysread Per leggere il contenuto del file. Quando si utilizza il metodo sysread, è possibile aprire il file in qualsiasi modalità. Ad esempio:
Ecco il file di testo di input:
Questo è un file di testo semplice per il fine di test.
Ora proviamo a leggere questo file:
#!/usr/bin/ruby aFile = File.new("input.txt", "r") if aFile content = aFile.sysread(20) puts content else puts "Unable to open file!" end
Questa istruzione scrive i primi 20 caratteri del file di input. Il puntatore del file viene posizionato alla posizione del 21 ° carattere del file.
Puoi usare il metodo syswrite Per scrivere contenuti nel file. Quando si utilizza il metodo syswrite, è necessario aprire il file in modalità scrittura. Ad esempio:
#!/usr/bin/ruby aFile = File.new("input.txt", "r+") if aFile aFile.syswrite("ABCDEF") else puts "Unable to open file!" end
Questa istruzione scrive "ABCDEF" nel file.
Questo metodo appartiene alla classe FileMetodo each_byte È una capacità di iterare ogni carattere di una stringa. Ecco un esempio di codice:
#!/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
Il carattere viene trasmesso uno per uno alla variabile ch e visualizzato sullo schermo, come segue:
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...
Classe File È una sottoclasse di classe IO. La classe IO ha anche alcuni metodi per l'operazione dei file.
IO.readlines È un metodo di classe IO. Questo metodo restituisce riga per riga il contenuto del file. Il seguente codice mostra il metodo IO.readlines utilizzo:
#!/usr/bin/ruby arr = IO.readlines("input.txt") puts arr[0] puts arr[1]
In questo codice, la variabile arr è un array. Il file input.txt Ogni riga sarà un elemento dell'array arr. Pertanto, arr[0] conterrà la prima riga e arr[1] conterrà la seconda riga del file.
Questo metodo restituisce anche l'output riga per riga. Il metodo foreach con il metodo readlines tra cui, il metodo foreach associato al blocco. Tuttavia, diversamente dal metodo readlinesmetodo foreach Non restituisce un array. Ad esempio:
#!/usr/bin/ruby IO.foreach("input.txt"){|block| puts block}
Questo codice trasferirà il file test Il contenuto del file viene trasmesso alla variabile block riga per riga, quindi l'output verrà visualizzato sullo schermo.
您可以通过 rename 和 delete Metodo per rinominare e eliminare file.
Esempio di rinomina di un file esistente: test1.txt:
#!/usr/bin/ruby # Rinomina del file test1.txt in test2.txt File.rename("test1.txt", "test2.txt")
Esempio di eliminazione di un file esistente: test2.txt:
#!/usr/bin/ruby # Eliminazione del file test2.txt File.delete("text2.txt")
Usare con maschera chmod Metodo per modificare il modello o i permessi/la lista di accesso del file:
Esempio di modifica di un file esistente: test.txt Il modello è un valore di maschera:
#!/usr/bin/ruby file = File.new("test.txt", "w") file.chmod(0755)
La tabella seguente elenca: chmod Diversi maschere disponibili nel metodo:
Maschera | Descrizione |
---|---|
0700 | maschera rwx, per il proprietario |
0400 | r, per il proprietario |
0200 | w, per il proprietario |
0100 | x, per il proprietario |
0070 | maschera rwx, per il gruppo di appartenenza |
0040 | r, per il gruppo di appartenenza |
0020 | w, per il gruppo di appartenenza |
0010 | x, per il gruppo di appartenenza |
0007 | maschera rwx, per altre persone |
0004 | r, per altre persone |
0002 | w, per altre persone |
0001 | x, per altre persone |
4000 | Esecuzione impostazione ID utente |
2000 | Imposta l'ID del gruppo proprietario durante l'esecuzione |
1000 | Salva il testo di scambio, persino dopo l'uso |
I seguenti comandi verificano se il file esiste prima di aprirlo:
#!/usr/bin/ruby File.open("file.rb") if File::exists?("file.rb")
I seguenti comandi verificano se il file è effettivamente un file:
#!/usr/bin/ruby # Restituisce true o false File.file?("text.txt")
I seguenti comandi verificano se il nome del file fornito è una directory:
#!/usr/bin/ruby # Una directory File::directory?("/usr/local/bin") # => true # Un file File::directory?("file.rb") # => false
I seguenti comandi verificano se il file è leggibile, scrivibile o eseguibile:
#!/usr/bin/ruby File.readable?("test.txt") # => true File.writable?("test.txt") # => true File.executable?("test.txt") # => false
I seguenti comandi verificano se la dimensione del file è zero:
#!/usr/bin/ruby File.zero?("test.txt") # => true
I seguenti comandi restituiscono la dimensione del file:
#!/usr/bin/ruby File.size?("text.txt") # => 1002
I seguenti comandi vengono utilizzati per verificare il tipo del file:
#!/usr/bin/ruby File::ftype("test.txt") # => file
Il metodo ftype identifica il tipo di file restituendo uno dei seguenti valori:file, directory, characterSpecial, blockSpecial, fifo, link, socket o unknown.
Le seguenti comandi vengono utilizzati per verificare il tempo di creazione, modifica o ultima accessibilità del file:
#!/usr/bin/ruby File::ctime("test.txt") # => Ven 09 Mag 10:06:37 -0700 2008 File::mtime("text.txt") # => Ven 09 Mag 10:44:44 -0700 2008 File::atime("text.txt") # => Ven 09 Mag 10:45:01 -0700 2008
所有的文件都是包含在目录中,Ruby 提供了处理文件和目录的方式。File 类用于处理文件,Dir 类用于处理目录。
为了在 Ruby 程序中改变目录,请使用 Dir.chdir。下面的示例改变当前目录为 /usr/bin.
Dir.chdir("/usr/bin")
您可以通过 Dir.pwd 查看当前目录:
puts Dir.pwd # 返回当前目录,类似 /usr/bin
您可以使用 Dir.entries 获取指定目录内的文件和目录列表:
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 "Questo è un file temporaneo" tempfile.close File.delete(tempfilename)
Questo codice crea un file temporaneo, scrive dati al suo interno e poi elimina il file. La libreria standard di Ruby include anche una chiamata Tempfile La libreria, che può essere utilizzata per creare file temporanei:
require 'tempfile' f = Tempfile.new('tingtong') f.puts "Hello" puts f.path f.close
Di seguito è fornita una lista completa delle funzioni native per la gestione dei file e delle directory in Ruby: