J'ai un fichier texte nommé foo.txt
, et son contenu est comme ci-dessous:
ce
est
texte
Comment pourrais-je imprimer ce fichier à l'écran avec Java 7?
Avant Java 7:
BufferedReader br = new BufferedReader(new FileReader("foo.txt"));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
Depuis Java 7, il n'est pas nécessaire de fermer le flux, car il implémente autocloseable
try (BufferedReader br = new BufferedReader(new FileReader("foo.txt"))) {
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
Pourquoi personne n'a-t-il pensé qu'il valait la peine de mentionner Scanner?
Scanner input = new Scanner(new File("foo.txt"));
while (input.hasNextLine())
{
System.out.println(input.nextLine());
}
Grâce aux ressources d’essai avec ressources de Java 7, la réponse de Jiri peut être améliorée:
try (BufferedReader br = new BufferedReader(new FileReader("foo.txt"))) {
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
Ajoutez la gestion des exceptions à l'endroit de votre choix, dans cette try
ou ailleurs.
Pour ceux qui découvrent Java et se demandent pourquoi la réponse de Jiri ne fonctionne pas, assurez-vous de faire ce qu'il dit et de gérer l'exception, sinon elle ne compilera pas. Voici le strict minimum:
import Java.io.BufferedReader;
import Java.io.FileReader;
import Java.io.IOException;
public class ReadFile {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("test.txt"));
for (String line; (line = br.readLine()) != null;) {
System.out.print(line);
}
br.close()
}
}
Chaque exemple ici montre une solution utilisant FileReader. C'est pratique si vous n'avez pas besoin de vous soucier d'un encodage de fichier. Si vous utilisez d'autres langues que l'anglais, l'encodage est assez important. Imaginez que vous avez un fichier avec ce texte
Příliš žluťoučký kůň
úpěl ďábelské ódy
et le fichier utilise le format Windows-1250. Si vous utilisez FileReader, vous obtiendrez le résultat suivant:
P��li� �lu�ou�k� k��
�p�l ��belsk� �dy
Ainsi, dans ce cas, vous devrez spécifier le codage Cp1250 (Windows Eastern European) mais le FileReader ne vous le permet pas. Dans ce cas, vous devez utiliser InputStreamReader sur un FileInputStream.
Exemple:
String encoding = "Cp1250";
File file = new File("foo.txt");
if (file.exists()) {
try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), encoding))) {
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
else {
System.out.println("file doesn't exist");
}
Si vous souhaitez lire le caractère de fichier après caractère, n'utilisez pas BufferedReader.
try (InputStreamReader isr = new InputStreamReader(new FileInputStream(file), encoding)) {
int data = isr.read();
while (data != -1) {
System.out.print((char) data);
data = isr.read();
}
} catch (IOException e) {
e.printStackTrace();
}