Java 파일을 문자열로 읽기

가끔 파일을 다룰 때 Java에서 파일을 String으로 읽어야 할 때가 있습니다. 오늘은 Java에서 파일을 String으로 읽는 다양한 방법을 살펴보겠습니다.

Java에서 파일을 String으로 읽기

Java에서 파일을 String으로 읽는 다양한 방법이 있습니다. 이 튜토리얼에서는 다음과 같은 방법들을 알아보겠습니다.

  1. BufferedReader를 이용한 Java에서 파일을 String으로 읽기
  2. Java에서 FileInputStream을 이용하여 파일을 String으로 읽기
  3. Files 클래스를 이용한 Java에서 파일을 String으로 읽기
  4. Scanner 클래스를 이용하여 파일을 String으로 읽기
  5. Apache Commons IO FileUtils 클래스를 이용한 Java에서 파일을 String으로 읽기

이제 이 클래스들을 살펴보고 파일을 String으로 읽어보겠습니다.

BufferedReader를 이용한 Java에서 파일을 String으로 읽기

우리는 BufferedReaderreadLine 메소드를 사용하여 파일을 한 줄씩 읽을 수 있습니다. 이를 StringBuilder 객체에 개행 문자와 함께 추가하면 됩니다. 아래는 BufferedReader를 사용하여 파일을 String으로 읽는 코드 스니펫입니다.

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);
}
// 마지막 개행 구분자 삭제
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
reader.close();

String content = stringBuilder.toString();

BufferedReader 및 char 배열을 사용하여 파일을 String으로 읽는 효율적인 다른 방법이 있습니다.

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

FileInputStream을 사용하여 Java에서 파일을 String으로 읽기

우리는 FileInputStream과 바이트 배열을 사용하여 파일을 String으로 읽을 수 있습니다. 이미지, 비디오 등과 같은 비-문자 기반 파일을 읽을 때 이 메소드를 사용해야 합니다.

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

Files 클래스를 사용하여 Java에서 파일을 문자열로 읽기

Files 유틸리티 클래스를 사용하여 한 줄의 코드로 파일 내용을 전체적으로 읽을 수 있습니다.

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

Scanner 클래스를 사용하여 파일을 문자열로 읽기

Scanner 클래스는 자바에서 텍스트 파일을 문자열로 읽는 빠른 방법입니다.

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

Apache Commons IO FileUtils 클래스를 사용하여 Java 파일을 문자열로 읽기

프로젝트에서 Apache Commons IO를 사용하는 경우에는 이것이 자바에서 파일을 문자열로 읽는 간단하고 빠른 방법입니다.

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

자바 파일을 문자열로 읽는 예제

여기에서는 적절한 예외 처리와 파일을 문자열로 읽는 다양한 방법을 보여주는 최종 프로그램입니다.

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);
			}
			// 마지막 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());
			// "\\A", "\\Z" 또는 "\\z"와 같은 구분자 정규식을 사용할 수 있습니다
			String data = scanner.useDelimiter("\\A").next();
			return data;
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		} finally {
			if (scanner != null)
				scanner.close();
		}

	}

}

자바에서 파일 내용을 문자열로 읽는 위의 방법 중 하나를 사용할 수 있습니다. 그러나 파일 크기가 큰 경우 메모리 부족 오류가 발생할 수 있으므로 권장되지 않습니다.

당신은 우리의 GitHub 저장소에서 더 많은 Java IO 예제를 확인할 수 있습니다.

참고 자료:

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