웹사이트 검색

자바 읽기 텍스트 파일


Java에서 텍스트 파일을 읽는 방법에는 여러 가지가 있습니다. 자바 읽기 텍스트 파일의 다른 방법을 하나씩 살펴보겠습니다.

자바 읽기 텍스트 파일

  1. Java는 Files 클래스를 사용하여 텍스트 파일 읽기
  2. FileReader를 사용하여 Java에서 텍스트 파일 읽기
  3. BufferedReader를 사용하여 Java 읽기 텍스트 파일
  4. Java에서 스캐너 클래스를 사용하여 텍스트 파일 읽기

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

Java는 java.nio.file.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.io.FileReader를 사용하여 Java에서 텍스트 파일 읽기

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

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){
    //process the line
    System.out.println(line);
}

java.io.BufferedReader를 사용하여 Java 읽기 텍스트 파일

파일을 한 줄씩 읽고 처리하려는 경우 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){
     //process the line
     System.out.println(line);
}
br.close();

스캐너를 사용하여 Java에서 텍스트 파일 읽기

파일을 한 줄씩 또는 일부 Java 정규식을 기반으로 읽으려는 경우 사용할 클래스는 Scanner입니다. 스캐너는 기본적으로 공백과 일치하는 구분 기호 패턴을 사용하여 입력을 토큰으로 나눕니다. 결과 토큰은 다양한 next 메서드를 사용하여 다른 유형의 값으로 변환될 수 있습니다. 스캐너 클래스는 동기화되지 않았으므로 스레드로부터 안전하지 않습니다.

Path path = Paths.get(fileName);
Scanner scanner = new Scanner(path);
System.out.println("Read text file using Scanner");
//read line by line
while(scanner.hasNextLine()){
    //process each line
    String line = scanner.nextLine();
    System.out.println(line);
}
scanner.close();

Java 읽기 파일 예제

다음은 자바에서 텍스트 파일을 읽는 방법을 보여주는 예제 클래스입니다. 예제 메서드는 스캐너, 파일, 인코딩 지원이 있는 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";
        
        //using Java 7 Files class to process small files, get complete file data
        readUsingFiles(fileName);
        
        //using Scanner class for large files, to read line by line
        readUsingScanner(fileName);
        
        //read using BufferedReader, to read line by line
        readUsingBufferedReader(fileName);
        readUsingBufferedReaderJava7(fileName, StandardCharsets.UTF_8);
        readUsingBufferedReader(fileName, StandardCharsets.UTF_8);
        
        //read using FileReader, no encoding support, not efficient
        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){
            //process the line
            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){
            //process the line
            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){
            //process the line
            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){
            //process the line
            System.out.println(line);
        }
        //close resources
        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");
        //read line by line
        while(scanner.hasNextLine()){
            //process each line
            String line = scanner.nextLine();
            System.out.println(line);
        }
        scanner.close();
    }

    private static void readUsingFiles(String fileName) throws IOException {
        Path path = Paths.get(fileName);
        //read file to byte array
        byte[] bytes = Files.readAllBytes(path);
        System.out.println("Read text file using Files class");
        //read file to String list
        @SuppressWarnings("unused")
		List<String> allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
        System.out.println(new String(bytes));
    }

}

스캐너, BufferedReader 또는 파일을 사용하여 파일을 읽는 선택은 프로젝트 요구 사항에 따라 다릅니다. 예를 들어, 파일을 기록하는 중이라면 Files 및 BufferedReader를 사용할 수 있습니다. 구분 기호를 기반으로 파일을 구문 분석하려는 경우 Scanner 클래스를 사용해야 합니다. 이 튜토리얼을 마치기 전에 RandomAccessFile에 대해 언급하고 싶습니다. 이것을 사용하여 자바에서 텍스트 파일을 읽을 수 있습니다.

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

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

이것이 자바 읽기 텍스트 파일 예제 프로그램의 전부입니다.