1789 Stimmen

Wie erstelle ich eine Java-Zeichenfolge aus dem Inhalt einer Datei?

Ich verwende das untenstehende Idiom schon seit einiger Zeit. Und es scheint das weit verbreitetste zu sein, zumindest auf den Seiten, die ich besucht habe.

Gibt es einen besseren/anderen Weg, um eine Datei in einen String in Java zu lesen?

private String readFile(String file) throws IOException {
    BufferedReader reader = new BufferedReader(new FileReader (file));
    String line = null;
    StringBuilder stringBuilder = new StringBuilder();
    String ls = System.getProperty("line.separator");

    try {
        while((line = reader.readLine()) != null) {
            stringBuilder.append(line);
            stringBuilder.append(ls);
        }

        return stringBuilder.toString();
    } finally {
        reader.close();
    }
}

8 Stimmen

Kann mir jemand auf eine sehr einfache Weise erklären, was es mit dem NIO auf sich hat? Jedes Mal, wenn ich darüber lese, verliere ich mich in der x-ten Erwähnung eines Kanals :(

8 Stimmen

Bitte beachten Sie, dass nicht garantiert ist, dass der Zeilentrenner in der Datei derselbe ist wie der Zeilentrenner des Systems.

7 Stimmen

Der obige Code hat einen Fehler, bei dem ein zusätzliches Zeilenumbruchzeichen in der letzten Zeile hinzugefügt wird. Es sollte etwas Ähnliches wie folgt sein: if ( (line = reader.readLine()) != null) { stringBuilder.append( line ); } while ( (line = reader.readLine()) != null) { stringBuilder.append( ls ); stringBuilder.append( line ); }

27voto

Home in Time Punkte 261

Wenn es sich um eine Textdatei handelt, warum nicht apache commons-io verwenden?

Es hat die folgende Methode

public static String readFileToString(File file) throws IOException

Wenn Sie die Zeilen als Liste möchten, verwenden Sie

public static List readLines(File file) throws IOException

25voto

leventov Punkte 13574

Seit JDK 11:

String file = ...
Path path = Paths.get(file);
String content = Files.readString(path);
// Oder readString(path, someCharset), wenn Sie ein Charset benötigen, das sich von UTF-8 unterscheidet

0 Stimmen

Warum, oh warum, neue Methoden einführen, die sich im Jahr 2018 auf den Standardsatz verlassen?

3 Stimmen

@mryan diese Methode ist nicht auf das Standard-Zeichensatzsystem des Systems angewiesen. Es wird standardmäßig auf UTF-8 eingestellt, das ist in Ordnung.

1 Stimmen

@leventov Du hast recht! Das gilt auch für Files.readAllLines! Das macht die Dateien-API nicht sehr konsistent mit älteren Methoden, aber das ist besser :)

17voto

Moritz Petersen Punkte 12247

Mit Java 7 ist dies meine bevorzugte Option zum Lesen einer UTF-8-Datei:

String content = new String(Files.readAllBytes(Paths.get(filename)), "UTF-8");

Seit Java 7 hat die JDK die neue java.nio.file-API, die viele Abkürzungen bietet, sodass für einfache Dateioperationen nicht immer Drittanbieterbibliotheken erforderlich sind.


Da immer noch Leute diese Antwort upvoten, hier ist eine bessere Lösung, die in Java 11 eingeführt wurde:

String content = Files.readString(path);

17voto

Peter Lawrey Punkte 511323

Um eine Datei binär zu lesen und am Ende umzuwandeln

public static String readFileAsString(String filePath) throws IOException {
DataInputStream dis = new DataInputStream(new FileInputStream(filePath));
try {
    long len = new File(filePath).length();
    if (len > Integer.MAX_VALUE) throw new IOException("Datei "+filePath+" zu groß, war "+len+" Bytes.");
    byte[] bytes = new byte[(int) len];
    dis.readFully(bytes);
    return new String(bytes, "UTF-8");
} finally {
    dis.close();
}
}

15voto

Claudiu Punkte 215027

Java versucht, in allem, was es tut, äußerst allgemein und flexibel zu sein. Als Ergebnis ist etwas, was in einer Skriptsprache relativ einfach ist (Ihr Code würde in Python durch "open(file).read()" ersetzt), viel komplizierter. Es scheint keine kürzere Möglichkeit zu geben, es zu tun, außer eine externe Bibliothek zu verwenden (wie von Willi aus Rohr erwähnt). Ihre Möglichkeiten:

  • Verwenden Sie eine externe Bibliothek.
  • Kopieren Sie diesen Code in alle Ihre Projekte.
  • Erstellen Sie Ihre eigene Mini-Bibliothek, die Funktionen enthält, die Sie oft verwenden.

Ihre beste Wahl ist wahrscheinlich die zweite, da sie die geringsten Abhängigkeiten hat.

4 Stimmen

Ja. Es gibt der "hoch" Sprache eine andere Bedeutung. Java ist im Vergleich zu C hoch, aber im Vergleich zu Python oder Ruby niedrig.

3 Stimmen

Stimme zu, dass Java vielen hochrangigen Abstraktionen hat, aber nur wenige Bequemlichkeitsmethoden.

3 Stimmen

Ja, Java bietet eine unvorstellbare Anzahl von Möglichkeiten, um mit Dateien umzugehen, und viele von ihnen scheinen kompliziert zu sein. Aber das ist ziemlich nah dran an dem, was wir in höheren Programmiersprachen haben: byte[] bytes = Files.readAllBytes(someFile.toPath());

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X