O JDK7 apresenta uma nova classe de operação de arquivo java.nio.file.file, que contém muitos métodos úteis para manipular arquivos, como verificar se o arquivo é um arquivo oculto ou verificando se o arquivo é um arquivo somente leitura. Os desenvolvedores também podem usar o método Files.readallbytes (PATH) para ler o arquivo inteiro na memória. Este método garante que, quando todos os conteúdos de bytes do arquivo forem lidos, os atributos do arquivo sejam fechados, caso contrário, ocorrerá uma exceção de IO ou outras exceções desmarcadas. Isso significa que, depois de ler o arquivo para o último conteúdo do bloco, não há necessidade de fechar o arquivo.
Observe que esse método não é adequado para ler arquivos grandes, porque pode haver espaço de memória insuficiente. Os desenvolvedores também devem especificar a codificação de caracteres do arquivo para evitar exceções ou analisar erros.
Se você deseja ler o arquivo como uma string, também pode usar o método ReadAlllines (caminho do caminho, Charset CS), que é semelhante ao método anterior, e não há necessidade de fechar o arquivo depois de ler o arquivo. Mas ele não retorna uma variedade de bytes, mas uma variedade de cordas. Além disso, o Java8 substitui esse método, sem especificar um conjunto de caracteres, usando diretamente a codificação UTF-8 para conversão de string.
Se você deseja ler o arquivo como uma linha de string por linha, poderá usar o método files.lines (), que retorna o fluxo da string do arquivo de leitura e converte os bytes em caracteres usando a codificação UTF-8. Usando o método foreach (), você pode usar apenas uma linha de código Java para produzir todo o conteúdo do arquivo no console, como o terceiro snippet de código abaixo.
A cópia do código é a seguinte:
importar java.io.ioException;
importar java.nio.charset.standardSetSets;
importar java.nio.file.files;
importar java.nio.file.paths;
importar java.util.list;
classe pública FileReadingTest {
public static void main (string [] args) lança ioexception {
// Java 7 exemplos
// files.readallbytes lê o arquivo na codificação UTF-8 por padrão.
System.out.println (new String (files.readallbytes (paths.get ("d: //jd.txt"))));
// 8 exemplos de java
List <tring> lines = files.readalllines (paths.get ("d: //jd.txt"), standardcharsets.utf_8);
Stringbuilder sb = new stringbuilder ();
para (linha de string: linhas) {
sb.append (linha);
}
String fromfile = sb.toString ();
System.out.println (FromFile);
}
}
Se você não estiver usando o JDK7, mas o JDK8, uma linha de código poderá concluir a leitura do arquivo.
A cópia do código é a seguinte:
importar java estático.lang.system.out;
importar java estático.nio.file.files.readallbytes;
importar java estático.nio.file.paths.get;
importar java.io.ioException;
classe pública FileIntostring {
public static void main (string [] args) lança ioexception {
// Uma linha de código pode ser usada para ler o arquivo, o padrão é a codificação UTF-8
out.println (new String (readallbytes (get ("d: /jd.txt"))));
}
}
Se você usar o JDK8, também poderá usar a API de streaming para ler e gravar arquivos, para que o código seja mais conciso e eficiente.
No exemplo a seguir, o método Lines () retorna um fluxo de string e a string usa a codificação UTF-8. do seguinte modo:
A cópia do código é a seguinte:
importar java.io.ioException;
importar java.nio.charset.standardSetSets;
importar java.nio.file.files;
importar java.nio.file.paths;
classe pública Java8FileReader {
public static void main (string [] args) lança ioexception {
// java 8 usa streaming para ler arquivos, o que é mais eficiente
Files.lines (paths.get ("d: //jd.txt"), standardcharsets.utf_8) .foreach (system.out :: println);
}
}
Alguns pontos a serem observados no exemplo acima:
1) O arquivo pode ser grande e pode exceder o espaço da memória.
2) Para produzir o log, registre por que o arquivo não pode ser lido ou nenhum erro encontrado ao ler o arquivo.
3) Ao converter bytes em caracteres, a codificação do caractere deve ser especificada.
4) para lidar com a situação em que o arquivo não existe.
Observe também que se o código do arquivo de leitura estiver codificando ANSI, o exemplo acima relatará um java.nio.charset.malformedInputexception: comprimento de entrada = 1 erro ao ler o conteúdo do arquivo.