48 votes

Ligne de lecture Java du fichier

Mon programme doit lire les fichiers texte - ligne par ligne. Fichiers en UTF-8. Je ne suis pas sûr que les fichiers soient corrects - peuvent contenir des caractères non imprimables. Est-il possible de le vérifier sans passer au niveau octet? Merci.

120voto

T.J. Crowder Points 285826

Ouvrir le fichier avec une FileInputStream, puis utiliser une InputStreamReader avec de l'UTF-8 Charset à lire des caractères dans le flux et l'utilisation d'un BufferedReader de lire des lignes, par exemple par l'intermédiaire BufferedReader#readLine, ce qui vous donnera une chaîne de caractères. Une fois que vous avez la chaîne, vous pouvez vérifier pour les caractères qui ne sont pas ce que vous considérez être imprimable.

E. g. (sans contrôle d'erreur):

InputStream    fis;
BufferedReader br;
String         line;

fis = new FileInputStream("the_file_name");
br = new BufferedReader(new InputStreamReader(fis, Charset.forName("UTF-8")));
while ((line = br.readLine()) != null) {
    // Deal with the line
}

// Done with the file
br.close();
br = null;
fis = null;

49voto

Jon Skeet Points 692016

Alors qu'il n'est pas difficile de le faire manuellement à l'aide d' BufferedReader et InputStreamReader, je ne l'utiliserais Goyave:

List<String> lines = Files.readLines(file, Charsets.UTF_8);

Ensuite, vous pouvez faire ce que vous voulez avec ces lignes.

EDIT: Notez que cela va lire tout le fichier en mémoire un aller. Dans la plupart des cas, c'est en fait amende - et c'est certainement plus simple que de lire ligne par ligne, le traitement de chaque ligne comme vous le lire. Si c'est un énorme fichier, vous pouvez avoir besoin de le faire de cette manière par T. J. Crowder réponse.

42voto

McIntosh Points 1193

Je viens de découvrir qu'avec le NIO Java ( java.nio.file.* ), vous pouvez facilement écrire:

 List<String> lines=Files.readAllLines(Paths.get("/tmp/test.csv"), Charset.forName("UTF-8"));
for(String line:lines){
  System.out.println(line);
}
 

au lieu de traiter avec FileInputStream s et BufferedReader s ...

15voto

Peter Lawrey Points 229686

Si vous voulez vérifier qu'une chaîne contient des caractères non imprimables, vous pouvez utiliser une expression régulière

 [^\p{Print}]
 

11voto

xproph Points 282

Que diriez-vous ci-dessous:

  FileReader fileReader = new FileReader(new File("test.txt"));

 BufferedReader br = new BufferedReader(fileReader);

 String line = null;
 // if no more lines the readLine() returns null
 while ((line = br.readLine()) != null) {
      // reading lines until the end of the file

 }
 

Source: http://devmain.blogspot.co.uk/2013/10/java-quick-way-to-read-or-write-to-file.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X