Java lire le fichier en chaîne

Parfois, en travaillant avec des fichiers, nous avons besoin de lire le fichier en tant que chaîne de caractères en Java. Aujourd’hui, nous examinerons différentes façons de lire le fichier en tant que chaîne de caractères en Java.

Lecture du fichier en tant que chaîne de caractères en Java

Il existe de nombreuses façons de lire un fichier en tant que chaîne de caractères en Java. Nous explorerons les méthodes suivantes dans ce tutoriel.

  1. Lecture du fichier en tant que chaîne de caractères en Java à l’aide de BufferedReader
  2. Lire le fichier en tant que chaîne de caractères en Java à l’aide de FileInputStream
  3. Lecture du fichier en tant que chaîne de caractères en Java à l’aide de la classe Files
  4. Lire le fichier en tant que chaîne de caractères à l’aide de la classe Scanner
  5. Lecture du fichier en tant que chaîne de caractères en Java à l’aide de la classe FileUtils d’Apache Commons IO

Maintenant, examinons ces classes et lisons un fichier en tant que chaîne de caractères.

Lecture du fichier en tant que chaîne de caractères en Java à l’aide de BufferedReader

Nous pouvons utiliser la méthode readLine de BufferedReader pour lire un fichier ligne par ligne. Tout ce que nous avons à faire est de les ajouter à un objet StringBuilder avec un caractère de nouvelle ligne. Voici un extrait de code pour lire le fichier en chaîne à l’aide de 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);
}
// supprimer le dernier séparateur de nouvelle ligne
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
reader.close();

String content = stringBuilder.toString();

Il existe une autre manière efficace de lire un fichier en chaîne à l’aide de BufferedReader et d’un tableau de caractères .

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

Lire un fichier en chaîne en Java en utilisant FileInputStream

Nous pouvons utiliser FileInputStream et un tableau de bytes pour lire un fichier en chaîne. Vous devriez utiliser cette méthode pour lire des fichiers non basés sur des caractères tels que des images, des vidéos, 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();

Lire un fichier en chaîne en Java en utilisant la classe Files

Nous pouvons utiliser la classe utilitaire Files pour lire tout le contenu du fichier en chaîne en une seule ligne de code.

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

Lire un fichier en chaîne de caractères à l’aide de la classe Scanner

La classe Scanner est un moyen rapide de lire un fichier texte en chaîne de caractères en Java.

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

Lire un fichier en chaîne de caractères en Java à l’aide de la classe FileUtils d’Apache Commons IO

Si vous utilisez Apache Commons IO dans votre projet, alors voici un moyen simple et rapide de lire le fichier en chaîne de caractères en Java.

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

Exemple de lecture d’un fichier en chaîne de caractères en Java

Voici le programme final avec une gestion appropriée des exceptions et montrant toutes les différentes façons de lire un fichier en chaîne de caractères.

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);
			}
			// supprimer le dernier 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());
			// on peut utiliser un délimiteur regex tel que "\\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();
		}

	}

}

Vous pouvez utiliser l’une des méthodes ci-dessus pour lire le contenu du fichier en chaîne de caractères en Java. Cependant, cela n’est pas recommandé si la taille du fichier est énorme car vous pourriez rencontrer des erreurs de mémoire.

Vous pouvez consulter plus d’exemples Java IO depuis notre référentiel GitHub.

Références:

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