web-dev-qa-db-fra.com

Java: lecture d'un fichier dans un tableau

J'ai un fichier (appelé "number.txt") que je veux lire dans un tableau en Java. Comment dois-je procéder exactement? Il s'agit d'un fichier "unidimensionnel" simple, contenant 100 chiffres.

Le problème est que j'obtiens une exception à chaque fois. Apparemment, il ne le trouve pas (je suis sûr qu'il est correctement orthographié). Lorsque vous consultez des exemples de code, il ne spécifie pas le chemin d'accès complet au fichier, uniquement le nom du fichier lui-même. Comment pourrais-je procéder si c'est nécessaire?

De plus, lors de la lecture du fichier, le tableau contiendra-t-il automatiquement toutes les lignes du fichier, ou devrai-je faire une boucle qui copie chaque ligne dans l'indice correspondant i?

J'ai entendu parler de la classe BufferedReader, de son objectif et comment cela correspond-il à la lecture des entrées?

30
Northener

Voici un exemple de code pour vous aider à démarrer:

package com.acme;

import Java.io.BufferedReader;
import Java.io.FileReader;
import Java.io.IOException;
import Java.util.ArrayList;
import Java.util.List;

public class FileArrayProvider {

    public String[] readLines(String filename) throws IOException {
        FileReader fileReader = new FileReader(filename);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        List<String> lines = new ArrayList<String>();
        String line = null;
        while ((line = bufferedReader.readLine()) != null) {
            lines.add(line);
        }
        bufferedReader.close();
        return lines.toArray(new String[lines.size()]);
    }
}

Et un exemple de test unitaire:

package com.acme;

import Java.io.IOException;

import org.junit.Test;

public class FileArrayProviderTest {

    @Test
    public void testFileArrayProvider() throws IOException {
        FileArrayProvider fap = new FileArrayProvider();
        String[] lines = fap
                .readLines("src/main/Java/com/acme/FileArrayProvider.Java");
        for (String line : lines) {
            System.out.println(line);
        }
    }
}

J'espère que cela t'aides.

66
toolkit
import Java.io.File;

import Java.nio.charset.Charset;
import Java.nio.file.Files;
import Java.nio.file.Path;

import Java.util.List;

// ...

Path filePath = new File("fileName").toPath();
Charset charset = Charset.defaultCharset();        
List<String> stringList = Files.readAllLines(filePath, charset);
String[] stringArray = stringList.toArray(new String[]{});
39
Hélio Santos

Apache Commons I/O fournit FileUtils # readLines (), ce qui devrait convenir à tous les fichiers sauf les énormes: http://commons.Apache.org/io/api-release/index.html . La distribution 2.1 inclut FileUtils.lineIterator (), qui conviendrait aux fichiers volumineux. Les bibliothèques Guava de Google incluent des utilitaires similaires.

4
Tony Nassar

Vous devriez pouvoir utiliser des barres obliques dans Java pour faire référence aux emplacements des fichiers.

La classe BufferedReader est utilisée pour encapsuler d'autres lecteurs de fichiers dont la méthode de lecture peut ne pas être très efficace. Une description plus détaillée peut être trouvée dans API Java .

L'utilisation de BufferedReader par Toolkit est probablement ce dont vous avez besoin.

0
Ryan Thames