web-dev-qa-db-fra.com

Java: imprimer le contenu du fichier texte à l'écran

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?

13
user2151887

Avant Java 7:

 BufferedReader br = new BufferedReader(new FileReader("foo.txt"));
 String line = null;
 while ((line = br.readLine()) != null) {
   System.out.println(line);
 }
  • ajouter la gestion des exceptions
  • ajouter la fermeture du flux

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);
   }
}
30
Jiri Kremser

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());
}
9
Haggra

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.

2
Dariusz

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()
    }
}
2
Joe

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();
}
1
vitfo