Java leggi il file in una stringa

A volte, mentre si lavora con i file, è necessario leggere il file in una stringa in Java. Oggi esamineremo vari modi per leggere il file in una stringa in Java.

Java leggere file in stringa

Ci sono molti modi per leggere un file in una stringa in Java. Esploreremo i seguenti modi in questo tutorial.

  1. Java leggere file in stringa usando BufferedReader
  2. Leggere file in stringa in java usando FileInputStream
  3. Java leggere file in stringa usando Files class
  4. Leggere file in stringa usando la classe Scanner
  5. Java leggere file in stringa usando la classe FileUtils di Apache Commons IO

Ora vediamo queste classi e leggiamo un file in una stringa.

Java leggere file in stringa usando BufferedReader

Possiamo utilizzare il metodo readLine di BufferedReader per leggere un file riga per riga. Tutto ciò che dobbiamo fare è aggiungerle a un oggetto StringBuilder con il carattere di nuova riga. Di seguito è riportato lo snippet di codice per leggere il file in una stringa utilizzando 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);
}
// elimina l'ultimo separatore di nuova riga
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
reader.close();

String content = stringBuilder.toString();

C’è un altro modo efficiente per leggere il file in una stringa utilizzando BufferedReader e un array di caratteri char.

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

Leggi il file in una stringa in Java usando FileInputStream

Possiamo utilizzare FileInputStream e un array di byte byte per leggere il file in una stringa. Dovresti usare questo metodo per leggere file non basati su caratteri come immagini, video, ecc.

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

Leggi il file in una stringa in Java usando la classe Files

Possiamo utilizzare la classe di utilità Files per leggere tutto il contenuto del file in una singola riga di codice.

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

Leggi il file in una stringa usando la classe Scanner

La classe Scanner è un modo rapido per leggere un file di testo in una stringa in Java.

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

Java legge il file in una stringa usando la classe FileUtils di Apache Commons IO

Se stai usando Apache Commons IO nel tuo progetto, questa è un modo semplice e veloce per leggere il file in una stringa in Java.

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

Esempio di Java legge il file in una stringa

Ecco il programma finale con una gestione delle eccezioni adeguata e che mostra tutti i diversi modi per leggere un file in una stringa.

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);
			}
			// elimina l'ultimo 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());
			// possiamo usare il Delimiter regex come "\\A", "\\Z" o "\\z"
			String data = scanner.useDelimiter("\\A").next();
			return data;
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		} finally {
			if (scanner != null)
				scanner.close();
		}

	}

}

Puoi utilizzare uno qualsiasi dei modi sopra indicati per leggere il contenuto del file in una stringa in Java. Tuttavia, non è consigliabile se le dimensioni del file sono molto grandi perché potresti incontrare errori di memoria insufficiente.

Puoi controllare altri esempi di Java IO dal nostro Repository GitHub.

Referenze:

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