Como ler de um arquivo local em java

Como ler de um arquivo local em java
Um arquivo local está no disco rígido ou em uma unidade flash conectada à porta USB. Os arquivos podem ser classificados em duas categorias: arquivos de texto e arquivos de byte. Arquivos de texto típicos são arquivos criados por um editor de texto. O arquivo de imagem é um exemplo de um arquivo de byte que consiste principalmente de bytes crus.

Este artigo fornece uma explicação básica de como ler Text Local e Byte Files em Java. Para ler um arquivo de texto, use a classe, FileReader. Para ler um arquivo de byte, use a classe, FileInputStream. Ambas as classes estão no java.io.* pacote, que deve ser importado. A primeira metade deste artigo lida com os arquivos de texto de leitura e a segunda metade lida com a leitura de arquivos de byte.

Lendo arquivos de texto

Construindo um objeto FileReader

Antes de aprender a construir um objeto FileReader, crie o seguinte arquivo de texto, com um editor de texto e pressione a tecla Enter no final das duas primeiras linhas:

Um texto 1 a texto 1 a texto 1 um texto 1 um texto 1
B Texto 2 B Texto 2 B Texto 2 B Texto 2 B Texto 2
C Texto 3 C Texto 3 C Texto 3 C Texto 3 C Texto 3

Se a tecla Enter não for pressionada no final da última linha, o editor de texto poderá adicionar uma nova linha quando o arquivo é salvo. Depois de produzir o texto anterior, salve o conteúdo, com o nome Temp.txt, usando o menu do editor de texto, usuário@host: ~/dir1 $, no diretório. Isso significa que o diretório, dir1, deveria ter sido criado.

Construindo um leitor de arquivo

A classe FileReader tem cinco construtores. Apenas um é ilustrado neste artigo (para manter o artigo curto). A sintaxe para o construtor é:

Public FileReader (String FileName) lança fileNotFoundException

Isso é criado na memória um fluxo (cópia) do arquivo, cujo caminho e nome é a string, nome do arquivo. Ele lança uma fileNotfoundException se o arquivo não for encontrado no diretório indicado. Depois de copiar o conteúdo do arquivo, o objeto de arquivo aberto deve ser fechado para liberar quaisquer recursos do sistema associados ao arquivo aberto.

Métodos importantes do FilEreader

Se o construtor for criado com sucesso, o arquivo será considerado aberto. Depois de usar o arquivo, o arquivo deve ser fechado. A sintaxe para fechar um arquivo é:

public void close () lança a ioexception

Depois que o arquivo acabou de ser aberto, a leitura efetiva do arquivo ainda não ocorreu. Para ler um caractere de cada vez (um e outro), empregue a sintaxe do método FileReader:

public int read () lança IoException

Isso retorna o personagem (como número inteiro) ou -1 se o final do fluxo (fluxo de cópia de arquivo na memória) foi alcançado.

Para ler a próxima sequência de caracteres do arquivo, em uma matriz, empregue a sintaxe do método FileReader:

public int leia (char [] cbuf, int off, int len) lança ioexception

Ele retorna o número de caracteres lidos ou -1 se o final do fluxo foi alcançado. Off na sintaxe significa deslocamento. É o índice no arquivo em que a leitura da seguinte sequência de caracteres é começar. Len é o número de caracteres para ler. Deve ser o comprimento da matriz, enquanto CBUF é a matriz que a sequência de caracteres é lida em.

Lembre -se de que o objeto FileReader deve ser fechado com seu método próximo após esta leitura eficaz.

A sintaxe do método, para saber se a próxima leitura não retornará -1, é:

Public Boolean Ready () lança IoException

Ele retorna verdadeiro se houver algo a ser lido e falso caso contrário.

Lendo em uma corda

O código a seguir, lê o arquivo anterior, caractere-by-caractere, em uma string stringbuilder:

Stringbuilder sb = new stringbuilder ();
tentar
FileReaderfr = new FileReader ("DIR1/Temp.TXT");
while (fr.preparar())
char ch = (char) fr.ler();
sb.anexar (CH);


Catch (Exceção e)
e.getMessage ();

Sistema.fora.println (sb);

O código começa com a instanciação de um objeto Stringbuilder, SB. Então, há o construto de tentativa. O bloqueio de tentativa começa com a instanciação do FileReader, fr. E há o loop while, que itera até que Ready () retorne. A primeira declaração no loop while lê e retorna o próximo personagem como um número inteiro. Tem que ser escalado para char. A próxima declaração no loop whrehwloop anexa o próximo personagem à string, sb. A saída é:

Um texto 1 a texto 1 a texto 1 um texto 1 um texto 1
B Texto 2 B Texto 2 B Texto 2 B Texto 2 B Texto 2
C Texto 3 C Texto 3 C Texto 3 C Texto 3 C Texto 3

É exatamente o conteúdo do arquivo, mas adicionou uma linha extra no computador do autor.

Lendo em uma matriz

Ao ler uma matriz, o conteúdo da matriz deve ser lançado, para que a próxima sequência de caracteres seja lida. O código a seguir ilustra o seguinte:

Stringbuilder sb = new stringbuilder ();
tentar
FileReaderfr = new FileReader ("DIR1/Temp.TXT");
while (fr.preparar())
char [] arr = novo char [5];
int offset = 0;
fr.Leia (arr, deslocamento, 5);
deslocamento = deslocamento + 5;
Sistema.fora.impressão (arr);


Catch (Exceção e)
e.getMessage ();

Sistema.fora.println ();

O valor do deslocamento deve ser incrementado para cada iteração pelo comprimento da matriz. A saída é:

Um texto 1 a texto 1 a texto 1 um texto 1 um texto 1
B Texto 2 B Texto 2 B Texto 2 B Texto 2 B Texto 2
C Texto 3 C Texto 3 C Texto 3 C Texto 3 C Texto 3

É exatamente como o conteúdo do arquivo, mas adicionou linha extra, no computador do autor.

Leitura de arquivos de byte

Construindo um objeto FileInputStream

O seguinte arquivo de imagem é chamado de barras.png. Está no usuário do diretório@host: ~/dir1 $, que é o mesmo diretório que a temperatura.TXT. Consiste em apenas três barras de cores:

Construindo um FileInputStream

Um construtor para um objeto FileInputStream é:

public fileInputStream (nome da string) lança fileNotfoundException

Como joga uma exceção, deve estar em uma construção de tentativa. Lembre -se de que esta aula é para ler bytes.

Métodos importantes do FileInputStream

Se o construtor for criado com sucesso, o arquivo será considerado aberto. Depois de ler os bytes, o arquivo deve ser fechado, empregando a seguinte sintaxe:

public void close () lança a ioexception

Depois que o arquivo acabou de ser aberto, a leitura efetiva do arquivo ainda não ocorreu. Para ler um byte de cada vez (um e o próximo), empregue a sintaxe do método FileInputStream:

public int read () lança IoException

Isso retorna o byte (como número inteiro), ou -1 se o final do fluxo (fluxo de cópia de arquivo na memória) foi alcançado.

Lembre -se de que, após essa leitura eficaz, o objeto FileInputStream deve ser fechado, com seu método próximo.

Para ter uma estimativa do número de bytes que permanecem a serem lidos, empregue a sintaxe do método:

public int disponível () lança IoException

Como esse método retorna uma estimativa, quando usado em conjunto com read (), não se pode ter certeza de que todos os bytes do arquivo foram lidos. E o método a seguir que lê todos os bytes deve ser preferido:

public byte [] readallbytes () lança IoException

Este método retorna todos os bytes restantes, mas ainda leria o arquivo inteiro.

Lendo em uma lista de Array

A lista de Array deve ser importada do Java.util.* pacote. O código a seguir lê uma estimativa de todos os bytes em um objeto Arraylist:

Arraylist al = new ArrayList ();
tentar
FileInputStream Fir = new FileInputStream ("Dir1/Barras.png ");
while (FIR.disponível ()> 0)
BYTE BT = (BYTE) FIR.ler();
al.add (bt);


Catch (Exceção e)
e.getMessage ();

Sistema.fora.println (Al);

O código começa com a instanciação de um objeto Arraylist, Al. Então, há o construto de tentativa. O bloqueio de tentativa começa com a instanciação do FileInputStream, FIR. E há o loop while, que itera até disponível () e sugere que nenhum byte é deixado para ser lido. A primeira declaração no loop while lê e retorna o próximo byte como um número inteiro. Tem que ser lançado para um byte. A próxima declaração no loop whrehw-loop (acrescenta) o próximo personagem à lista, Al. A saída é:

[-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, -7, 0, 0, 0, - - - - 10, 8, 6, 0, 0, 0, 20, 25, 33, 69, 0, 0, 0, 6, 98, 75, 71, 68, 0, -1, 0, -1, 0, -1 , -96, -67, -89, -109, 0, 0, 3, 48, 73, 68, 65, 84, 120, -100, -19, -42, 49, 74, 67, 81, 0, 68, -47, -81, -68, 52, 105, 83, -120, 85, 42, 65, -112, -12, 41, 44, 92, 64, -74, -26, 34, 92, -110, -115, -107, 32, -23, -19, 44, 4, 9, -60, 85, 60, 62, 92, -50, 89, -63, 52, 23, -26, - - 26, -70, 44, -41, 5, 104, 58, -99 - - e continua - - - -]

Bytes são inteiros. Felizmente, a imagem das três barras anteriores consiste em todos esses bytes. A idéia é que o programador altere alguns dos bytes, modifique a imagem e salve o resultado; Em seguida, divida-o com o visualizador de imagem enquanto apresentava uma imagem modificada. No entanto, este cronograma extra não é abordado neste artigo.

Lendo em uma matriz

O método readallbytes () retorna uma variedade de bytes. Então, basta receber os valores de retorno, com uma matriz de bytes, como mostra o código a seguir:

byte [] arr = novo byte [1000];
tentar
FileInputStream Fir = new FileInputStream ("Dir1/Barras.png ");
arr = Fir.readallBytes ();

Catch (Exceção e)
e.getMessage ();

para (int i = 0; iSistema.fora.impressão (arr [i] + ",");
Sistema.fora.println ();

O código começa com a declaração da matriz que receberá os bytes. O tamanho (comprimento) aqui deve estar acima do tamanho estimado. O tamanho estimado pode ser obtido com o método disponível (). O código principal está no bloqueio de tentativa. A saída é:

-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, -7, 0, 0, 0, -10, 8, 6, 0, 0, 0, 20, 25, 33, 69, 0, 0, 0, 6, 98, 75, 71, 68, 0, -1, 0, -1, 0, -1, - 96, -67, -89, -109, 0, 0, 3, 48, 73, 68, 65, 84, 120, -100, -19, -42, 49, 74, 67, 81, 0, 68, -47, -81, -68, 52, 105, 83, -120, 85, 42, 65, -112, -12, 41, 44, 92, 64, -74, -26, 34, 92, -110 , -115, -107, 32, -23, -19, 44, 4, 9, -60, 85, 60, 62, 92, -50, 89, -63, 52, 23, -26, -26, -70, 44, -41, 5, 104, 58, -99, - - e continua - - -

Esta saída e a anterior são iguais no computador do autor.

Conclusão

Texto local e arquivos de byte podem ser lidos. Para ler um arquivo de texto, use a classe Stream, FileReader. Para ler um arquivo de byte, use a classe Stream, FileInputStream. Ambas as classes estão no java.io.* pacote, que deve ser importado. Essas duas classes têm construtores e métodos que permitem a leitura. Esperamos que você tenha achado esse artigo útil. Confira outros artigos de dica do Linux para obter mais dicas e tutoriais.