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.
Réponses
Trop de publicités?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;
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.
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 ...
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