O melhor tutorial Rubi arquivo de entrada e de saída em 2024. Neste tutorial você pode aprender colocadeclaração,recebeStatement,declaraçãoputc,instruções deimpressão,Abrir e fechar arquivos,Leitura e gravação de arquivos,Renomear e apagar arquivos,modo de arquivo e de propriedade,Acesso a Documentos,diretório ruby,Criar um arquivo de diretório temporário &,Funções internas,
Ruby fornece um conjunto de métodos de E / S relacionados com implementadas no módulo do kernel (kernel). Todos método de I / O é derivada da classe IO.
IOfornece toda a abordagem baseada em classes, tais comoleitura, gravação, fica, puts,readline, getc eprintf.
Esta seção irá explicar todas as funções de E / S baseadas em Rubi disponíveis. Para mais funções, consulte classeIOde Ruby.
Na seção anterior, você atribuído a uma variável e, em seguida, usar a impressão declaraçãoputs.
colocadeclaração indica que o programa mostra os valores armazenados em variáveis. Isto irá adicionar uma nova linha no fim de cada linha.
#!/usr/bin/ruby val1 = "This is variable one" val2 = "This is variable two" puts val1 puts val2
Execute o exemplo acima saída é:
This is variable one This is variable two
recebedeclaração pode ser usado para obter a entrada do usuário a partir da tela padrão chamado STDIN.
O código a seguir demonstra como usar a declaração fica. O código irá solicitar que o usuário digite um valor que será armazenado no val variável, a final será impresso em STDOUT.
#!/usr/bin/ruby puts "Enter a value :" val = gets puts val
Execute o exemplo acima saída é:
Enter a value : This is entered value This is entered value
Ecolocauma instrução diferente, a declaraçãocolocaa saída de toda a cadeia para o ecrã, enquanto a afirmaçãoputcpode ser usado para produzir uma sequência de caracteres.
A saída do seguinte código único personagem H:
#!/usr/bin/ruby str="Hello Ruby!" putc str
Execute o exemplo acima saída é:
H
imprimirdeclarações ecolocauma declaração semelhante. A única diferença é que, após a indicaçãocolocaa saída irá saltar para a próxima linha, enquanto que a utilização de instrução deimpressão,o cursor está posicionado sobre a mesma linha.
#!/usr/bin/ruby print "Hello World" print "Good Morning"
Execute o exemplo acima saída é:
Hello WorldGood Morning
A partir de agora, você tem que ler e escrever para a entrada e saída padrão. Agora, vamos olhar para a forma como os arquivos de dados reais.
Você pode criar um objeto dearquivoé usado para ler métodoFile.new,escrever ou ler e escrever, ler e escrever permissões, dependendo dos parâmetros de modo. Finalmente, você pode usar o métodoFile.Closepara fechar o arquivo.
aFile = File.new("filename", "mode") # pt. 处理文件 aFile.close
Você pode criar um novo objeto de arquivo usando o métodoFile.open,eo objeto é atribuído para o arquivo arquivo. No entanto, existe uma diferença entre os métodos eFile.OpenFile.New. A diferença éFile.openmétodo pode ser associado com o bloco, mas não métodoFile.new.
File.open("filename", "mode") do |aFile| # pt. process the file end
A tabela a seguir lista os arquivos abertos em modos diferentes:
模式 | 描述 |
---|---|
r | 只读模式。文件指针被放置在文件的开头。这是默认模式。 |
r+ | 读写模式。文件指针被放置在文件的开头。 |
w | 只写模式。如果文件存在,则重写文件。如果文件不存在,则创建一个新文件用于写入。 |
w+ | 读写模式。如果文件存在,则重写已存在的文件。如果文件不存在,则创建一个新文件用于读写。 |
a | 只写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于写入。 |
a+ | 读写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于读写。 |
O método para simples de E / S também pode ser utilizado para todos os objectos de ficheiro. Assim, fica lê uma linha daentrada padrão,aFile.gets aFile lê uma linha do objeto de arquivo.
No entanto, I / O objeto fornece um conjunto adicional de métodos de acesso, fornece-nos com a conveniência.
Você pode usar o métodosysreadpara ler o conteúdo do arquivo. Ao usar o sysread método, você pode usar qualquer um modo para abrir o arquivo. Por exemplo:
O seguinte é o arquivo de texto de entrada:
This is a simple text file for testing purpose.
Agora vamos tentar ler o arquivo:
#!/usr/bin/ruby aFile = File.new("input.txt", "r") if aFile content = aFile.sysread(20) puts content else puts "Unable to open file!" end
Esta declaração vai entrar os primeiros 20 caracteres do arquivo. O ponteiro do arquivo será colocado em uma posição no arquivo de 21 caracteres.
Você pode usar osyswritemétodo para gravar o arquivo. Ao usar o syswrite método, você precisa abrir o arquivo em modo de gravação. Por exemplo:
#!/usr/bin/ruby aFile = File.new("input.txt", "r+") if aFile aFile.syswrite("ABCDEF") else puts "Unable to open file!" end
As declarações são escritas "ABCDEF" para um arquivo.
Este método pertence aoarquivodeclasse.Each_byte forma iterativa é capaz de cadeia cada personagem. Considere os seguintes exemplos de código:
#!/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
Um por um carácter variável é passado CH, e então exibido no ecrã, como mostrado abaixo:
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.ept.
classeFileé uma subclasse da classe IO. classe IO também tem alguns métodos para a manipulação de arquivos.
IO.readlinesé IO classe um método. Esse método retorna o conteúdo de um arquivo linha por linha. O código a seguir mostra um métodoIO.readlinesusar:
#!/usr/bin/ruby arr = IO.readlines("input.txt") puts arr[0] puts arr[1]
Nesse código, a variável é uma arr matriz. Cada linha é um arquivo arr matrizinput.txtum elemento. Portanto, arr [0] conterá a primeira linha, e arr [1] conterá a segunda linha do arquivo.
O método também retorna a saída progressiva.Foreachentre os diferentes métodos e métodosreadlinesestá associada bloco método deforeach.No entanto, ao contrário doreadlines método, ométodoforeachem vez de retornar um array. Por exemplo:
#!/usr/bin/ruby IO.foreach("input.txt"){|block| puts block}
Este código irátestaro conteúdo do arquivo passado bloco progressiva variável, então a saída será exibida na tela.
Renomear Você poderenomeare apagar arquivos eexcluirmétodos.
O exemplo a seguir renomeia um arquivo que já existetest1.txt:
#!/usr/bin/ruby # 重命名文件 test1.txt 为 test2.txt File.rename( "test1.txt", "test2.txt" )
O exemplo a seguir para excluir umtest2.txtarquivoexistente:
#!/usr/bin/ruby # 删除文件 test2.txt File.delete("text2.txt")
Usechmodpara alterar o método com uma lista padrão de máscara e permissões de arquivo / access:
Exemplos de as seguintes alterações em um modelotest.txtarquivo existente para um valor de máscara:
#!/usr/bin/ruby file = File.new( "test.txt", "w" ) file.chmod( 0755 )
A tabela a seguir lista os diferentes máscaras métodochmodpodem ser usados:
掩码 | 描述 |
---|---|
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 | 保存交换文本,甚至在使用后也会保存 |
O seguinte comando para verificar o arquivo antes de abrir o arquivo já existe:
#!/usr/bin/ruby File.open("file.rb") if File::exists?( "file.rb" )
O seguinte comando para consultar se o arquivo é realmente um arquivo:
#!/usr/bin/ruby # 返回 true 或false File.file?( "text.txt" )
Seguinte comando para verificar se o arquivo informado é um diretório:
#!/usr/bin/ruby # 一个目录 File::directory?( "/usr/local/bin" ) # => true # 一个文件 File::directory?( "file.rb" ) # => false
É o seguinte comando para verificar o arquivo legível, gravável, executável:
#!/usr/bin/ruby File.readable?( "test.txt" ) # => true File.writable?( "test.txt" ) # => true File.executable?( "test.txt" ) # => false
O comando a seguir verifica o tamanho do arquivo para zero:
#!/usr/bin/ruby File.zero?( "test.txt" ) # => true
A sequência de comando retorna o tamanho do ficheiro:
#!/usr/bin/ruby File.size?( "text.txt" ) # => 1002
O comando a seguir é usado para verificar o tipo de arquivo:
#!/usr/bin/ruby File::ftype( "test.txt" ) # => file
Método ftype retorna um valor do seguinte para identificar o tipo dearquivo: arquivo, diretório, characterSpecial, blockSpecial, fifo, link, soqueteou desconhecida.
O comando a seguir é usado para verificar o arquivo foi criado, modificado ou último tempo de acesso:
#!/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
Todos os arquivos estão contidos no diretório, Ruby fornece uma processar arquivos e diretórios.Arquivoclasses para trabalhar comarquivos,classes Dir para diretório de trabalho.
Para alterar o diretório no programa Ruby, utilize oDir.chdir.Exemplos de as seguintes alterações para o diretório atual é/ usr / bin.
Dir.chdir("/usr/bin")
Você pode ver oDir.pwddiretórioatual:
puts Dir.pwd # 返回当前目录,类似 /usr/bin
Você pode usarDir.entriesobter os arquivos e diretórios dentro da listagem de diretório especificado:
puts Dir.entries("/usr/bin").join(' ')
Dir.entriesretorna um array contendo todo o diretório especificado.Dir.foreachfornece a mesma funcionalidade:
Dir.foreach("/usr/bin") do |entry| puts entry end
Obter uma listagem de diretório de uma maneira mais concisa é um método usando a matriz classe Dir:
Dir["/usr/bin/*"]
Dir.mkdirpode ser usado para criar o diretório:
Dir.mkdir("mynewdir")
Você também pode configurar permissões no novo diretório (não diretório existente), aprovada mkdir:
Nota: Máscara 755 Set proprietário (proprietário), pertence ao grupo (grupo), todos (mundo [ninguém]) permissões rwxr-xr-x, onde r = ler ler, w = escrever escrever, x = executar a execução.
Dir.mkdir( "mynewdir", 755 )
Dir.deleteser usado para excluir diretórios.Dir.unlinkeDir.rmdirexecutar a mesma função, fornece-nos com a conveniência.
Dir.delete("testdir")
arquivos temporários são criados que são simplesmente no processo de execução do programa, mas não armazenado permanentemente informações.
Dir.tmpdirfornece um caminho no diretório temporário do sistema atual, que por padrão, mas não está disponível. Para fazerDir.tmpdirdisponíveis, com é necessário o "tmpdir« necessária.
Você podeDir.tmpdireFile.joinusados em conjunto para criar uma independentes de plataforma arquivos temporários:
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)
Este código cria um arquivo temporário no qual a gravação de dados e exclua o arquivo. Rubi biblioteca padrão contém também uma biblioteca denominadaTempfileda biblioteca pode ser utilizada para criar um ficheiro temporário:
require 'tempfile' f = Tempfile.new('tingtong') f.puts "Hello" puts f.path f.close
A seguir fornece uma lista completa de arquivos e diretórios em funções embutidas de Ruby: