가끔 파일을 다룰 때 Java에서 파일을 String으로 읽어야 할 때가 있습니다. 오늘은 Java에서 파일을 String으로 읽는 다양한 방법을 살펴보겠습니다.
Java에서 파일을 String으로 읽기
Java에서 파일을 String으로 읽는 다양한 방법이 있습니다. 이 튜토리얼에서는 다음과 같은 방법들을 알아보겠습니다.
- BufferedReader를 이용한 Java에서 파일을 String으로 읽기
- Java에서 FileInputStream을 이용하여 파일을 String으로 읽기
- Files 클래스를 이용한 Java에서 파일을 String으로 읽기
- Scanner 클래스를 이용하여 파일을 String으로 읽기
- Apache Commons IO FileUtils 클래스를 이용한 Java에서 파일을 String으로 읽기
이제 이 클래스들을 살펴보고 파일을 String으로 읽어보겠습니다.
BufferedReader를 이용한 Java에서 파일을 String으로 읽기
우리는 BufferedReader
의 readLine
메소드를 사용하여 파일을 한 줄씩 읽을 수 있습니다. 이를 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