Primeiro, deixe -me apresentar a diferença entre o InputStreamReader e o FileReader. O conteúdo específico é o seguinte:
InputStreamReader e BufferredReader. A classe mais importante entre eles é o InputStreamReader, que é a ponte para converter bytes em caracteres. Você pode re-especificar o método de codificação no construtor. Se não for especificado, o método de codificação padrão do sistema operacional subjacente será adotado, como GBK, etc.
O FileReader e o InputStreamReader envolvem a conversão da codificação (especifique o método de codificação ou use a codificação padrão do sistema operacional), e o código ilegal pode ocorrer em diferentes plataformas! O FileInputStream é processado no modo binário e não terá código iluminado.
Os fluxos de bytes de FileInputStream são lidos byte byte.
Os fluxos de caracteres do FileReader são lidos como personagens um por um.
BufferReader bUfreader = null; inputStreamReader isr = null; fileReader fr = null; tente {for (string filename: filenames) {método 1: isr = new inputStreamReader (new FileInputStream ("d: /test.txt"), "utf-8"); bufreader = new BufferredReader (ISR); Método 2: fr = new fileReader ("d: /test.txt"); bufreader = new BufferredReader (FR); while (bufreader.ready ()) {// 1. Obtenha cada linha de dados string dataline = bufreader.readline (); }}A diferença entre InputStream e Leitor
Existem duas classes abstratas abaixo do Java.io: InputStream e Reader
O InputStream é uma superclasse que representa todas as classes de um fluxo de entrada de bytes.
O leitor é uma classe abstrata para ler fluxos de personagens
O InputStream fornece a leitura de fluxos de bytes, não a leitura de texto, que é a diferença fundamental entre ela e a classe de leitores.
Ou seja, a matriz ou string de char é lida usando o leitor, e a matriz de bytes é lida usando o InputStream.
Depois de esclarecer a diferença fundamental entre as duas superclasses, vejamos o uso de suas subclasses abaixo. Aqui estão apenas algumas das explicações mais usadas
InputStream
| __FileInputStream
O FileInputStream obtém bytes de entrada de um arquivo no sistema de arquivos.
Resumo dos métodos de construção
FileInputStream (arquivo de arquivo)
Crie um FileInputStream abrindo uma conexão com o arquivo real, especificado pelo arquivo de objeto de arquivo no sistema de arquivos.
FileInputStream (FileDescriptor FDOBJ)
Crie um FileInputStream usando o descritor de arquivo FDOBJ, que representa uma conexão existente com um arquivo real no sistema de arquivos.
FileInputStream (nome da string)
Crie um FileInputStream abrindo uma conexão com o arquivo real, especificado pelo nome do caminho do caminho no sistema de arquivos.
Leitor
|-Reader-buffered
| ___ InputStreamReader
| __FileReader
BufferredReader: Leia o texto de um fluxo de entrada de caracteres e buffer caracteres individuais, permitindo a leitura eficiente de caracteres, matrizes e linhas.
Resumo dos métodos de construção
BufferredReader (leitor in)
Cria um fluxo de entrada de caracteres em buffer que usa o buffer de entrada de tamanho padrão.
BufferredReader (leitor in, int sz)
Cria um fluxo de entrada de caracteres em buffer que usa o buffer de entrada de tamanho especificado.
BufferredReader (Java Platform SE 6)
O maior recurso do BufferredReader é a configuração do buffer. Geralmente, toda solicitação de leitura feita pelo leitor resulta em solicitações de leitura correspondentes para o stream de caracteres ou bytes subjacentes. Se não houver buffer, cada chamada para ler () ou readline () resultará em bytes sendo lidos no arquivo e convertendo -o em caracteres e devolvê -lo, o que é extremamente ineficiente.
Use o BufferErader para especificar o tamanho do buffer ou o tamanho padrão pode ser usado. Na maioria dos casos, o valor padrão é grande o suficiente.
Portanto, é recomendável embrulhar todos os leitores cujas operações de leitura () podem ser caras (como FileReader e InputStreamReader) com o BufferredReader.
Por exemplo,
BufferredReader in = new BufferredReader (new FileReader ("foo.in"));Entrada de buffer para o arquivo especificado.
InputStreamReader (Java Platform SE 6)
InputStreamReader é a ponte entre fluxos de bytes e fluxos de caracteres: lê bytes usando o charset especificado e os decodifica em caracteres. O conjunto de caracteres utilizado pode ser especificado ou explicitamente dado pelo nome, ou pode aceitar o conjunto de caracteres padrão da plataforma.
Resumo dos métodos de construção
InputStreamReader (InputStream in) cria um inputStreamReader que usa o conjunto de caracteres padrão. InputStreamReader (InputStream in, Charset CS) cria um InputStreamReader que usa o conjunto de caracteres fornecido. InputStreamReader (InputStream in, CharsetDecoder DEC) cria um inputStreamReader que usa o decodificador do conjunto de caracteres fornecido. InputStreamReader (InputStream in, String CharSetName) cria um InputStreamReader que usa o conjunto de caracteres especificado.
Cada chamada para um método read () no InputStreamReader resulta em um ou mais bytes sendo lidos no fluxo de entrada subjacente. Para permitir a conversão eficaz de byte em caráter, você pode ler mais bytes do fluxo subjacente com antecedência, excedendo os bytes necessários para satisfazer a operação de leitura atual.
Para alcançar a máxima eficiência, considere envolver o InputStreamReader dentro do BufferredReader. Por exemplo:
BufferredReader in = new BufferredReader (new InputStreamReader (System.in));
A maior característica do InputStreamReader é que ele pode se referir ao formato de codificação fixa da conversão, o que não é possível com outras classes. Pode ser visto no método de construção. Isso é muito útil ao ler caracteres chineses.
FileReader
1) Introdução à classe FileReader:
As subclasses da classe InputStreamReader, todos os métodos (read (), etc.) são herdados da classe pai InputStreamReader;
2) Diferenças da classe InputStreamReader:
Resumo dos métodos de construção
FileReader (arquivo de arquivo)
Crie um novo FileReader, dado um arquivo do qual os dados são lidos.
FileReader (FileDescriptor FD)
Crie um novo FileReader, devido a um FilDescriptor do qual os dados são lidos.
FileReader (nome do arquivo de string)
Crie um novo FileReader, dado o nome do arquivo do qual os dados são lidos
A principal diferença entre esta classe e sua classe pai InputStreamReader é o construtor, e a principal diferença é o construtor!
Do construtor do InputStreamReader, os parâmetros são o método InputStream e codificação. Pode -se observar que, quando você deseja especificar o método de codificação, a classe InputStreamReader deve ser usada; e os parâmetros do construtor FileReader são os mesmos que o FileInputStream, que é um objeto de arquivo ou uma string que representa o caminho. Pode -se observar que, quando você deseja ler um arquivo com base no objeto ou string do arquivo, use o FileReader;
Penso que a função da subclasse do FileReader está nesta pequena divisão do trabalho. A principal diferença entre esta classe e sua classe pai InputStreamReader é o construtor, e a principal diferença é o construtor!
Do InputStreamReader
No construtor, os parâmetros são o método InputStream e de codificação. Pode -se observar que, quando você deseja especificar o método de codificação, a classe InputStreamReader deve ser usada; e os parâmetros do construtor FileReader são os mesmos que o FileInputStream, que é um objeto de arquivo ou uma string que representa o caminho. Pode -se observar que, quando você deseja ler um arquivo com base no objeto ou string do arquivo, use o FileReader;
Penso que a função da subclasse do FileReader está nesta pequena divisão do trabalho.
Duas conexões e diferenças
(1) caracteres e bytes:
A classe FileInputStream usa entrada/saída binária, e a velocidade de E/S é rápida e eficiente, mas seu método read () lê um byte (dados binários), que é muito desfavorável para as pessoas lerem e não podem operar diretamente em caracteres no arquivo, como substituição e pesquisa (deve ser operado em bytes);
A classe do leitor compensa esse defeito e pode inserir/sair no formato de texto, o que é muito conveniente; Por exemplo, você pode usar o while (CH = fileReader.read ())! =-1) loop para ler o arquivo; Você pode usar o método readLine () do BufferReader para ler linha por linha.
(2) codificação
InputStreamReader, é a ponte para converter bytes em caracteres. Você pode re-especificar o método de codificação no construtor. Se não for especificado, o método de codificação padrão do sistema operacional subjacente será adotado, como GBK, etc.
O FileReader e o InputStreamReader envolvem a conversão da codificação (especifique o método de codificação ou use a codificação padrão do sistema operacional), e o código ilegal pode ocorrer em diferentes plataformas! O FileInputStream é processado no modo binário e não terá código iluminado.
Portanto, ao especificar o método de codificação, a classe InputStreamReader deve ser usada, por isso é uma ponte para converter bytes em caracteres;
(3) Área de cache
A classe BufferReader é usada para envolver todos os leitores cujas operações de leitura () podem ser caras (como FileReader e InputStreamReader).
(4) Uso padronizado
Resuma o exposto acima e crie um melhor uso padrão:
1) arquivo de arquivo = novo arquivo ("hello.txt");
FileInputStream in = new FileInputStream (File);
2) arquivo de arquivo = novo arquivo ("hello.txt");
FileInputStream in = new FileInputStream (File); InputStreamReader inader = new InputStreamReader (in, "UTF-8"); BufferErader Bufreader = new BufferredReader (inader);
3) arquivo de arquivo = novo arquivo ("hello.txt");
Filereader filereader = new fileReader (arquivo); BufferredReader Bufreader = new BufferredReader (FileReader);