Manchmal müssen wir beim Arbeiten mit Dateien die Datei in einen String in Java einlesen. Heute werden wir uns verschiedene Möglichkeiten anschauen, eine Datei in einen String in Java einzulesen.
Datei in einen String einlesen in Java
Es gibt viele Möglichkeiten, eine Datei in einen String in Java einzulesen. In diesem Tutorial werden wir die folgenden Möglichkeiten untersuchen.
- Datei in einen String einlesen mit BufferedReader
- Datei in einen String einlesen in Java mit FileInputStream
- Datei in einen String einlesen mit der Files-Klasse
- Datei in einen String einlesen mit der Scanner-Klasse
- Datei in einen String einlesen in Java mit der Apache Commons IO FileUtils-Klasse
Nun schauen wir uns diese Klassen genauer an und lesen eine Datei in einen String ein.
Datei in einen String einlesen mit BufferedReader in Java
Wir können die BufferedReader
-Methode readLine
verwenden, um eine Datei zeilenweise zu lesen. Alles, was wir tun müssen, ist diese an ein StringBuilder-Objekt mit einem Zeilenumbruch anzuhängen. Unten finden Sie den Codeausschnitt zum Lesen der Datei in einen String mit BufferedReader.
BufferedReader reader = new BufferedReader(new FileReader(fileName));
StringBuilder stringBuilder = new StringBuilder();
String line = null;
String ls = System.getProperty("line.separator");
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(ls);
}
// Löschen des letzten Zeilentrennzeichens
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
reader.close();
String content = stringBuilder.toString();
Es gibt einen weiteren effizienten Weg, um eine Datei in einen String mit BufferedReader und einem char-Array zu lesen.
BufferedReader reader = new BufferedReader(new FileReader(fileName));
StringBuilder stringBuilder = new StringBuilder();
char[] buffer = new char[10];
while (reader.read(buffer) != -1) {
stringBuilder.append(new String(buffer));
buffer = new char[10];
}
reader.close();
String content = stringBuilder.toString();
Datei in einen String in Java mit FileInputStream lesen
Wir können FileInputStream und ein Byte-Array verwenden, um eine Datei in einen String zu lesen. Sie sollten diese Methode verwenden, um nicht-zeichenbasierte Dateien wie Bilder, Videos usw. zu lesen.
FileInputStream fis = new FileInputStream(fileName);
byte[] buffer = new byte[10];
StringBuilder sb = new StringBuilder();
while (fis.read(buffer) != -1) {
sb.append(new String(buffer));
buffer = new byte[10];
}
fis.close();
String content = sb.toString();
Java: Datei in einen String mit der Files-Klasse lesen
Wir können die Hilfsklasse Files verwenden, um den gesamten Dateiinhalt in einem einzigen Codezeile zu lesen.
String content = new String(Files.readAllBytes(Paths.get(fileName)));
Lesen Sie eine Datei in einen String mit der Scanner-Klasse
Die Scanner-Klasse ist eine schnelle Möglichkeit, eine Textdatei in einen String in Java zu lesen.
Scanner scanner = new Scanner(Paths.get(fileName), StandardCharsets.UTF_8.name());
String content = scanner.useDelimiter("\\A").next();
scanner.close();
Java lesen Sie eine Datei in einen String mit der Apache Commons IO FileUtils-Klasse
Wenn Sie Apache Commons IO in Ihrem Projekt verwenden, ist dies eine einfache und schnelle Möglichkeit, die Datei in einen String in Java zu lesen.
String content = FileUtils.readFileToString(new File(fileName), StandardCharsets.UTF_8);
Java lesen Sie eine Datei in einen String Beispiel
Hier ist das endgültige Programm mit korrekter Ausnahmebehandlung und zeigt alle verschiedenen Möglichkeiten, eine Datei in einen String zu lesen.
package com.journaldev.files;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;
import org.apache.commons.io.FileUtils;
public class JavaReadFileToString {
/**
* This class shows different ways to read complete file contents to String
*
* @param args
* @throws IOException
*/
public static void main(String[] args) {
String fileName = "/Users/pankaj/Downloads/myfile.txt";
String contents = readUsingScanner(fileName);
System.out.println("*****Read File to String Using Scanner*****\n" + contents);
contents = readUsingApacheCommonsIO(fileName);
System.out.println("*****Read File to String Using Apache Commons IO FileUtils*****\n" + contents);
contents = readUsingFiles(fileName);
System.out.println("*****Read File to String Using Files Class*****\n" + contents);
contents = readUsingBufferedReader(fileName);
System.out.println("*****Read File to String Using BufferedReader*****\n" + contents);
contents = readUsingBufferedReaderCharArray(fileName);
System.out.println("*****Read File to String Using BufferedReader and char array*****\n" + contents);
contents = readUsingFileInputStream(fileName);
System.out.println("*****Read File to String Using FileInputStream*****\n" + contents);
}
private static String readUsingBufferedReaderCharArray(String fileName) {
BufferedReader reader = null;
StringBuilder stringBuilder = new StringBuilder();
char[] buffer = new char[10];
try {
reader = new BufferedReader(new FileReader(fileName));
while (reader.read(buffer) != -1) {
stringBuilder.append(new String(buffer));
buffer = new char[10];
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null)
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return stringBuilder.toString();
}
private static String readUsingFileInputStream(String fileName) {
FileInputStream fis = null;
byte[] buffer = new byte[10];
StringBuilder sb = new StringBuilder();
try {
fis = new FileInputStream(fileName);
while (fis.read(buffer) != -1) {
sb.append(new String(buffer));
buffer = new byte[10];
}
fis.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis != null)
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
private static String readUsingBufferedReader(String fileName) {
BufferedReader reader = null;
StringBuilder stringBuilder = new StringBuilder();
try {
reader = new BufferedReader(new FileReader(fileName));
String line = null;
String ls = System.getProperty("line.separator");
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(ls);
}
// lösche den letzten ls
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null)
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return stringBuilder.toString();
}
private static String readUsingFiles(String fileName) {
try {
return new String(Files.readAllBytes(Paths.get(fileName)));
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
private static String readUsingApacheCommonsIO(String fileName) {
try {
return FileUtils.readFileToString(new File(fileName), StandardCharsets.UTF_8);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
private static String readUsingScanner(String fileName) {
Scanner scanner = null;
try {
scanner = new Scanner(Paths.get(fileName), StandardCharsets.UTF_8.name());
// Sie können den Trennzeichen-Regex als "\\A", "\\Z" oder "\\z" verwenden
String data = scanner.useDelimiter("\\A").next();
return data;
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
if (scanner != null)
scanner.close();
}
}
}
Sie können eine der oben genannten Möglichkeiten verwenden, um den Dateiinhalt in einen String in Java zu lesen. Es wird jedoch nicht empfohlen, dies bei großen Dateigrößen zu tun, da Sie Speicherfehler erhalten könnten.
Sie können weitere Java-IO-Beispiele aus unserem GitHub-Repository überprüfen.
Referenzen:
Source:
https://www.digitalocean.com/community/tutorials/java-read-file-to-string