A veces, mientras trabajamos con archivos, necesitamos leer el archivo a String en Java. Hoy veremos varias formas de leer el archivo a String en Java.
Java leer archivo a String
Hay muchas formas de leer un archivo a String en Java. Exploraremos las siguientes formas en este tutorial.
- Java leer archivo a String usando BufferedReader
- Leer archivo a String en Java usando FileInputStream
- Java leer archivo a String usando la clase Files
- Leer archivo a String usando la clase Scanner
- Java leer archivo a String usando la clase FileUtils de Apache Commons IO
Ahora veamos estas clases y leamos un archivo a String.
Java leer archivo a String usando BufferedReader
Podemos usar el método readLine
de BufferedReader
para leer un archivo línea por línea. Todo lo que tenemos que hacer es agregar estas líneas a un objeto StringBuilder con el carácter de nueva línea. A continuación se muestra el fragmento de código para leer el archivo a 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);
}
// eliminar el último separador de nueva línea
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
reader.close();
String content = stringBuilder.toString();
Hay otra forma eficiente de leer un archivo a String usando BufferedReader y un 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();
Leer archivo a String en Java usando FileInputStream
Podemos usar FileInputStream y un array de bytes para leer un archivo a String. Deberías utilizar este método para leer archivos que no son de tipo carácter, como imágenes, videos, 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();
Java: leer archivo a String usando la clase Files
Podemos utilizar la clase de utilidad Files para leer todo el contenido del archivo a String en una sola línea de código.
String content = new String(Files.readAllBytes(Paths.get(fileName)));
Leer archivo a String usando la clase Scanner
La clase Scanner es una forma rápida de leer un archivo de texto a una cadena en Java.
Scanner scanner = new Scanner(Paths.get(fileName), StandardCharsets.UTF_8.name());
String content = scanner.useDelimiter("\\A").next();
scanner.close();
Leer archivo a String en Java usando la clase FileUtils de Apache Commons IO
Si estás utilizando Apache Commons IO en tu proyecto, entonces esta es una forma simple y rápida de leer el archivo a una cadena en Java.
String content = FileUtils.readFileToString(new File(fileName), StandardCharsets.UTF_8);
Ejemplo de lectura de archivo a String en Java
Aquí está el programa final con el manejo adecuado de excepciones y mostrando todas las diferentes formas de leer un archivo a una cadena.
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);
}
// eliminar el ú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 el Delimitador regex como "\\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();
}
}
}
Puedes usar cualquiera de las formas anteriores para leer el contenido del archivo a una cadena en Java. Sin embargo, no es recomendable si el tamaño del archivo es enorme porque podrías enfrentarte a errores de falta de memoria.
Puedes consultar más ejemplos de Java IO en nuestro Repositorio de GitHub.
Referencias:
Source:
https://www.digitalocean.com/community/tutorials/java-read-file-to-string