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

3voto

Nitin Punkte 2276

Benutzer java.nio.Files um alle Zeilen der Datei zu lesen.

public String readFile() throws IOException {
        File fileToRead = new File("Dateipfad");
        List fileLines = Files.readAllLines(fileToRead.toPath());
        return StringUtils.join(fileLines, StringUtils.EMPTY);
}

3voto

Scott S. McCoy Punkte 1077
public static String slurp (final File file)
throws IOException {
    StringBuilder result = new StringBuilder();

    BufferedReader reader = new BufferedReader(new FileReader(file));

    try {
        char[] buf = new char[1024];

        int r = 0;

        while ((r = reader.read(buf)) != -1) {
            result.append(buf, 0, r);
        }
    }
    finally {
        reader.close();
    }

    return result.toString();
}

0 Stimmen

Ich denke, dies hat den Nachteil, die Standarde Codierung der Plattform zu verwenden. +1 trotzdem :)

7 Stimmen

Es scheint mir, dass der finally-Block die in dem try-Block definierten Variablen nicht kennt. javac 1.6.0_21 wirft den Fehler kann das Symbol nicht finden.

0 Stimmen

Hast du überhaupt deinen eigenen Code ausprobiert? Du hast den reader im try/catch-Block definiert, daher wird er im finally-Block nicht zugänglich sein.

3voto

Muskovets Punkte 441

Basierend auf @ericksons Antwort, kannst du folgendes verwenden:

public String readAll(String fileName) throws IOException {
    List lines = Files.readAllLines(new File(fileName).toPath());
    return String.join("\n", lines.toArray(new String[lines.size()]));
}

3voto

jamesjara Punkte 554

Sie können die Scanner- und File-Klasse ausprobieren, eine Lösung in wenigen Zeilen

 try
{
  String content = new Scanner(new File("file.txt")).useDelimiter("\\Z").next();
  System.out.println(content);
}
catch(FileNotFoundException e)
{
  System.out.println("nicht gefunden!");
}

3voto

satnam Punkte 9520

Mit dieser Bibliothek ist es in einer Zeile:

String data = IO.from(new File("data.txt")).toString();

1 Stimmen

Wenn die Zeilen innerhalb der Bibliothek nicht gezählt werden.

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