Java 텍스트 파일 읽기

자바에서 텍스트 파일을 읽는 다양한 방법이 있습니다. 하나씩 살펴보겠습니다.

자바에서 텍스트 파일 읽기

자바에서 텍스트 파일은 문자로 이루어져 있으므로 Reader 클래스를 사용할 수 있습니다. 또한 텍스트 파일을 읽기 위한 유틸리티 클래스도 있습니다.

  1. Files 클래스를 사용하여 자바에서 텍스트 파일 읽기
  2. FileReader를 사용하여 자바에서 텍스트 파일 읽기FileReader
  3. BufferedReader를 사용하여 자바에서 텍스트 파일 읽기
  4. Scanner 클래스를 사용하여 자바에서 텍스트 파일 읽기

이제 이러한 클래스를 사용하여 자바에서 텍스트 파일을 읽는 방법에 대한 예제를 살펴보겠습니다.

Java read text file using java.nio.file.Files

파일의 모든 내용을 바이트 배열로 읽기 위해 Files 클래스를 사용할 수 있습니다. Files 클래스에는 모든 줄을 문자열 목록으로 읽는 메서드도 있습니다. Files 클래스는 Java 7에서 소개되었으며 파일의 모든 내용을 로드해야 할 때 좋습니다. 이 방법은 작은 파일에서만 작업하고 파일의 모든 내용이 메모리에 필요할 때만 사용해야 합니다.

String fileName = "/Users/pankaj/source.txt";
Path path = Paths.get(fileName);
byte[] bytes = Files.readAllBytes(path);
List<String> allLines = Files.readAllLines(path, StandardCharsets.UTF_8);

Java에서 텍스트 파일 읽기 java.io.FileReader 사용

FileReader를 사용하여 BufferedReader를 가져온 다음 파일을 한 줄씩 읽을 수 있습니다. FileReader는 인코딩을 지원하지 않으며 시스템 기본 인코딩과 함께 작동하므로 Java에서 텍스트 파일을 읽는 데 효율적인 방법은 아닙니다.

String fileName = "/Users/pankaj/source.txt";
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
while((line = br.readLine()) != null){
    //라인 처리
    System.out.println(line);
}

Java read text file using java.io.BufferedReader

BufferedReader는 파일을 한 줄씩 읽고 처리하려는 경우 좋습니다. 대용량 파일을 처리하는 데 좋으며 인코딩도 지원합니다. BufferedReader는 동기화되어 있으므로 BufferedReader에서 읽기 작업은 여러 스레드에서 안전하게 수행할 수 있습니다. BufferedReader의 기본 버퍼 크기는 8KB입니다.

String fileName = "/Users/pankaj/source.txt";
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, cs);
BufferedReader br = new BufferedReader(isr);

String line;
while((line = br.readLine()) != null){
      //라인 처리
     System.out.println(line);
}
br.close();

Java에서 텍스트 파일 읽기에 Scanner 사용하기

파일을 한 줄씩 또는 일부 java 정규 표현식을 기준으로 읽고 싶은 경우 Scanner 클래스를 사용합니다. Scanner는 입력을 구분 기호 패턴을 사용하여 토큰으로 분할하며 기본적으로 공백과 일치합니다. 그 결과로 생성된 토큰은 다양한 next 메서드를 사용하여 다른 유형의 값으로 변환될 수 있습니다. Scanner 클래스는 동기화되어 있지 않으므로 스레드 안전하지 않습니다.

Path path = Paths.get(fileName);
Scanner scanner = new Scanner(path);
System.out.println("Read text file using Scanner");
 //라인별로 읽기
while(scanner.hasNextLine()){
     //각 라인 처리
    String line = scanner.nextLine();
    System.out.println(line);
}
scanner.close();

Java 파일 읽기 예제

여기에는 Java에서 텍스트 파일을 읽는 방법을 보여주는 예제 클래스가 있습니다. 예제 메서드는 Scanner, Files, 인코딩 지원이 포함된 BufferedReader 및 FileReader를 사용합니다.

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.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Scanner;

public class JavaReadFile {

    public static void main(String[] args) throws IOException {
        String fileName = "/Users/pankaj/source.txt";
        
        //작은 파일을 처리하기 위해 Java 7 Files 클래스를 사용하여 완전한 파일 데이터를 가져옵니다
        readUsingFiles(fileName);
        
        //큰 파일의 경우 Scanner 클래스를 사용하여 한 줄씩 읽습니다
        readUsingScanner(fileName);
        
        //BufferedReader를 사용하여 한 줄씩 읽습니다
        readUsingBufferedReader(fileName);
        readUsingBufferedReaderJava7(fileName, StandardCharsets.UTF_8);
        readUsingBufferedReader(fileName, StandardCharsets.UTF_8);
        
        //FileReader를 사용하여 읽으며 인코딩 지원이 없으므로 효율적이지 않습니다
        readUsingFileReader(fileName);
    }

    private static void readUsingFileReader(String fileName) throws IOException {
        File file = new File(fileName);
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line;
        System.out.println("Reading text file using FileReader");
        while((line = br.readLine()) != null){
            //라인 처리
            System.out.println(line);
        }
        br.close();
        fr.close();
        
    }

    private static void readUsingBufferedReader(String fileName, Charset cs) throws IOException {
        File file = new File(fileName);
        FileInputStream fis = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fis, cs);
        BufferedReader br = new BufferedReader(isr);
        String line;
        System.out.println("Read text file using InputStreamReader");
        while((line = br.readLine()) != null){
            //라인 처리
            System.out.println(line);
        }
        br.close();
        
    }

    private static void readUsingBufferedReaderJava7(String fileName, Charset cs) throws IOException {
        Path path = Paths.get(fileName);
        BufferedReader br = Files.newBufferedReader(path, cs);
        String line;
        System.out.println("Read text file using BufferedReader Java 7 improvement");
        while((line = br.readLine()) != null){
            //라인 처리
            System.out.println(line);
        }
        br.close();
    }

    private static void readUsingBufferedReader(String fileName) throws IOException {
        File file = new File(fileName);
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line;
        System.out.println("Read text file using BufferedReader");
        while((line = br.readLine()) != null){
            //라인 처리
            System.out.println(line);
        }
        //리소스를 닫습니다
        br.close();
        fr.close();
    }

    private static void readUsingScanner(String fileName) throws IOException {
        Path path = Paths.get(fileName);
        Scanner scanner = new Scanner(path);
        System.out.println("Read text file using Scanner");
        //한 줄씩 읽습니다
        while(scanner.hasNextLine()){
            //각 라인을 처리합니다
            String line = scanner.nextLine();
            System.out.println(line);
        }
        scanner.close();
    }

    private static void readUsingFiles(String fileName) throws IOException {
        Path path = Paths.get(fileName);
        //파일을 바이트 배열로 읽습니다
        byte[] bytes = Files.readAllBytes(path);
        System.out.println("Read text file using Files class");
        //파일을 문자열 목록으로 읽습니다
        @SuppressWarnings("unused")
		List allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
        System.out.println(new String(bytes));
    }

}

파일을 읽는 데 사용할 Scanner 또는 BufferedReader 또는 Files의 선택은 프로젝트 요구 사항에 따라 다릅니다. 예를 들어 파일을 로깅하기만 한다면 Files와 BufferedReader를 사용할 수 있습니다. 파일을 구분 기준에 따라 구문 분석하려는 경우 Scanner 클래스를 사용해야 합니다. 이 튜토리얼을 마치기 전에 RandomAccessFile에 대해 언급하고 싶습니다. 이것을 사용하여 Java에서 텍스트 파일을 읽을 수 있습니다.

RandomAccessFile file = new RandomAccessFile("/Users/pankaj/Downloads/myfile.txt", "r");
String str;

while ((str = file.readLine()) != null) {
	System.out.println(str);
}
file.close();

이것으로 Java 텍스트 파일 예제 프로그램에 대한 설명을 마치겠습니다.

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