web-dev-qa-db-fra.com

Comment utiliser Buffered Reader en Java

Désolé si c'est une question évidente, mais je n'arrive pas à l'obtenir. Je travaille sur un travail pour un cours sur les structures de données. Cela implique d'extraire des données d'un simple fichier .dat. Nous n'avions jamais utilisé aucune des options d'accès aux fichiers en Java auparavant, le professeur vient donc de nous donner le code de travail pour cette pièce. Ainsi, une classe appelée 'FileReadExample' crée un nouvel objet lecteur mis en mémoire tampon, ouvre un fichier, puis est supposée extraire un tas de données sur ce fichier. Mais je ne peux accéder à aucune des données. Dans un fichier testMain séparé, je crée un nouvel objet FileReadExample nommé fr, puis j'essaie d'imprimer des éléments tels que fr.readLine () à partir de là, mais cela m'indique qu'il n'existe pas de telle méthode. Je suis sûr que je manque quelque chose d'étonnamment facile. 

EDIT - Le code des professeurs:

import Java.io.BufferedReader;
import Java.io.File;
import Java.io.FileReader;
import Java.io.IOException;

public class FileReadExample
{
    public static void main(String[] args)
    {
        System.out.println("got here");
        try
        {
            BufferedReader in = new BufferedReader(new FileReader(new File("sample-file.dat")));
            System.out.println("File open successful!");

            int line = 0;
            for (String x = in.readLine(); x != null; x = in.readLine())
            {
                line++;
                System.out.println(x);
                if (line <= 3)
                {
                    String[] tokens = x.split(" ");
                    System.out.println("Number of tokens in line " + line + ": " + tokens.length);
                    System.out.println("The tokens are:");
                    for (String token : tokens)
                    {
                        System.out.println(token);
                    }
                }
                else
                {
                    String[] tokens = x.split("\\|");
                    System.out.println("Number of tokens in line " + line + ": " + tokens.length);
                    System.out.println("The tokens are:");
                    for (String token : tokens)
                    {
                        System.out.println(token);
                    }
                    Integer[] values = new Integer[tokens.length];
                    Integer sum = 0;
                    for (int i = 0; i < tokens.length; i++)
                    {
                        sum += Integer.parseInt(tokens[i]);
                    }
                    System.out.println("Sum: " + sum);
                }
            }
        } catch (IOException e)
        {
            System.out.println("File I/O error!");
        }
    }
}

Je peux poster le code que le professeur a donné, mais je n'arrive pas à comprendre comment obtenir le formatage exact dans ces posts. Est-ce que je comprends bien que je dois mettre quatre espaces devant chaque ligne pour obtenir le formatage correct du code ici? Il n'y a aucun moyen de bloquer tout un tas de code à la fois? Encore une fois, je sens qu'il me manque quelque chose d'extrêmement facile. 

Merci.

36

Essayez ceci pour lire un fichier:

BufferedReader reader = null;

try {
    File file = new File("sample-file.dat");
    reader = new BufferedReader(new FileReader(file));

    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }

} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        reader.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
73

Autant que je sache, c'est l'objet de votre classe FileReadExample. Il est donc évident qu’il n’y aura pas de méthode comme fr.readLine () si vous n’en créez pas vous-même.

deuxièmement, je pense qu'un constructeur correct de la classe BufferedReader vous aidera à faire votre travail.

String str;
BufferedReader buffread = new BufferedReader(new FileReader(new File("file.dat")));
str = buffread.readLine();
.
.
buffread.close();

cela devrait vous aider.

0
Onkar Borgaonkar