Java ler arquivo para String

Às vezes, ao trabalhar com arquivos, precisamos ler o arquivo para uma String em Java. Hoje vamos explorar várias maneiras de ler o arquivo para uma String em Java.

Java leitura de arquivo para String

Existem muitas maneiras de ler um arquivo para uma String em Java. Vamos explorar as seguintes maneiras neste tutorial.

  1. Java leitura de arquivo para String usando BufferedReader
  2. Ler arquivo para String em Java usando FileInputStream
  3. Java leitura de arquivo para string usando classe Files
  4. Ler arquivo para String usando a classe Scanner
  5. Java leitura de arquivo para string usando a classe FileUtils do Apache Commons IO

Agora vamos analisar essas classes e ler um arquivo para String.

Java leitura de arquivo para String usando BufferedReader

Podemos usar o método readLine do BufferedReader para ler um arquivo linha por linha. Tudo o que precisamos fazer é anexá-las a um objeto StringBuilder com o caractere de nova linha. Abaixo está o trecho de código para ler o arquivo para String usando 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);
}
// delete the last new line separator
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
reader.close();

String content = stringBuilder.toString();

Existe outra maneira eficiente de ler o arquivo para String usando BufferedReader e array de caracteres.

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

Ler arquivo para String em Java usando FileInputStream

Podemos usar FileInputStream e array de bytes para ler o arquivo para String. Você deve usar este método para ler arquivos não baseados em caracteres, como imagens, vídeos, etc.

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

Ler arquivo para string em Java usando a classe Files

Podemos usar a classe utilitária Files para ler todo o conteúdo do arquivo para string em uma única linha de código.

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

Ler arquivo para String usando a classe Scanner

A classe Scanner é uma maneira rápida de ler um arquivo de texto para uma string em Java.

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

Java lê arquivo para string usando a classe Apache Commons IO FileUtils

Se você estiver usando o Apache Commons IO em seu projeto, esta é uma maneira simples e rápida de ler o arquivo para uma string em Java.

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

Exemplo de leitura de arquivo para String em Java

Aqui está o programa final com um tratamento adequado de exceções e mostrando todas as maneiras diferentes de ler um arquivo para uma string.

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);
			}
			// deletar o último 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());
			// podemos usar Delimiter regex como "\\A", "\\Z" ou "\\z"
			String data = scanner.useDelimiter("\\A").next();
			return data;
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		} finally {
			if (scanner != null)
				scanner.close();
		}

	}

}

Você pode usar qualquer uma das maneiras acima para ler o conteúdo do arquivo para uma string em Java. No entanto, não é aconselhável se o tamanho do arquivo for grande, pois você pode enfrentar erros de falta de memória.

Você pode conferir mais exemplos de Java IO em nosso Repositório GitHub.

Referências:

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