Java lees bestand naar String

Soms moeten we tijdens het werken met bestanden het bestand naar een String lezen in Java. Vandaag zullen we kijken naar verschillende manieren om het bestand naar een String te lezen in Java.

Java lees bestand naar String

Er zijn veel manieren om een bestand naar een String te lezen in Java. We zullen de volgende methoden verkennen in deze tutorial.

  1. Java lees bestand naar String met behulp van BufferedReader
  2. Lees bestand naar String in Java met behulp van FileInputStream
  3. Java lees bestand naar string met behulp van Files class
  4. Lees bestand naar String met behulp van Scanner-klasse
  5. Java lees bestand naar string met behulp van Apache Commons IO FileUtils-klasse

Laten we nu naar deze klassen kijken en een bestand naar String lezen.

Java lees bestand naar String met behulp van BufferedReader

We kunnen de BufferedReader readLine-methode gebruiken om een bestand regel voor regel te lezen. Alles wat we moeten doen is deze toevoegen aan een StringBuilder-object met een nieuwe regel. Hieronder staat het codefragment om het bestand naar een String te lezen met behulp van 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);
}
// verwijder de laatste nieuwe regel scheider
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
reader.close();

String content = stringBuilder.toString();

Er is een andere efficiënte manier om een bestand naar een String te lezen met behulp van BufferedReader en een char-array.

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

Lees bestand naar String in Java met behulp van FileInputStream

We kunnen FileInputStream en een byte-array gebruiken om een bestand naar een String te lezen. Je zou deze methode moeten gebruiken om niet op tekens gebaseerde bestanden zoals afbeeldingen, video’s, etc. te lezen.

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 lees bestand naar string met behulp van de Files-klasse

We kunnen de utilityklasse Files gebruiken om alle bestandsinhoud naar een string te lezen in één regel code.

String content = new String(Files.readAllBytes(Paths.get(fileName)));

Lees bestand naar String met behulp van de Scanner-klasse

De Scanner-klasse is een snelle manier om een tekstbestand naar een string te lezen in Java.

Scanner scanner = new Scanner(Paths.get(fileName), StandardCharsets.UTF_8.name());
String content = scanner.useDelimiter("\\A").next();
scanner.close();

Java lees bestand naar string met behulp van de Apache Commons IO FileUtils-klasse

Als u Apache Commons IO gebruikt in uw project, dan is dit een eenvoudige en snelle manier om het bestand naar een string te lezen in Java.

String content = FileUtils.readFileToString(new File(fileName), StandardCharsets.UTF_8);

Java lees bestand naar String voorbeeld

Hier is het uiteindelijke programma met de juiste uitzonderingsafhandeling en het tonen van alle verschillende manieren om een bestand naar een string te lezen.

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);
			}
			// verwijder de laatste 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());
			// we kunnen een Delimiter-reguliere expressie gebruiken zoals "\\A", "\\Z" of "\\z"
			String data = scanner.useDelimiter("\\A").next();
			return data;
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		} finally {
			if (scanner != null)
				scanner.close();
		}

	}

}

Je kunt een van de bovenstaande manieren gebruiken om de inhoud van het bestand naar een string te lezen in Java. Het is echter niet aan te raden als het bestand groot is, omdat je mogelijk geheugenfouten tegenkomt.

Je kunt meer Java IO-voorbeelden bekijken op onze GitHub Repository.

Referenties:

Source:
https://www.digitalocean.com/community/tutorials/java-read-file-to-string