it-swarm.com.de

Java: Lesen einer Datei in ein Array

Ich habe eine Datei (mit dem Namen "number.txt"), die ich in ein Array in Java lesen möchte. Wie genau gehe ich vor und mache das? Es ist eine einfache "eindimensionale" Datei, die 100 Zahlen enthält.

Das Problem ist, dass ich jedes Mal eine Ausnahme bekomme. Anscheinend kann es es nicht finden (ich bin sicher, dass es richtig geschrieben ist). Beim Durchsuchen von Codebeispielen wird nicht der gesamte Dateipfad, sondern nur der Name der Datei selbst angegeben. Wie würde ich das machen, wenn es nötig ist?

Enthält das Array beim Lesen der Datei automatisch alle Zeilen der Datei, oder muss ich eine Schleife erstellen, die jede Zeile in den entsprechenden Index i kopiert?

Ich habe von der BufferedReader-Klasse gehört, wozu sie dient und wie sich dies auf das Lesen von Eingaben auswirkt.

30
Northener

Hier ist ein Beispielcode, der Ihnen den Einstieg erleichtert:

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

Und ein Beispiel für einen Unit-Test:

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);
        }
    }
}

Hoffe das hilft.

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 stellt FileUtils # readLines () bereit, die für alle Dateien außer großen Dateien geeignet sein sollten: http://commons.Apache.org/io/api-release/index.html . Die 2.1-Distribution enthält FileUtils.lineIterator (), das für große Dateien geeignet wäre. Die Guava-Bibliotheken von Google enthalten ähnliche Dienstprogramme.

4
Tony Nassar

Sie sollten in der Lage sein, Schrägstriche in Java) zu verwenden, um auf Dateispeicherorte zu verweisen.

Die BufferedReader-Klasse wird zum Umbrechen anderer Dateireader verwendet, deren Lesemethode möglicherweise nicht sehr effizient ist. Eine ausführlichere Beschreibung finden Sie in Java APIs .

Die Verwendung von BufferedReader durch Toolkit ist wahrscheinlich genau das, was Sie benötigen.

0
Ryan Thames