Java ler arquivo para String

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

Ler arquivo para String em Java

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

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

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

Ler 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 uma 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);
}
// deletar o último separador de nova linha
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
reader.close();

String content = stringBuilder.toString();

Há outra maneira eficiente de ler um arquivo para String usando BufferedReader e um 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 um 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 uma 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();

Ler arquivo para string em Java usando a classe FileUtils do Apache Commons IO

Se você estiver usando o Apache Commons IO em seu projeto, então 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 tratamento adequado de exceções e mostrando todas as diferentes maneiras 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);
			}
			// delete the last 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 can use Delimiter regex as "\\A", "\\Z" or "\\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 porque você pode enfrentar erros de falta de memória.

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

Referências:

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