코딩 스쿨 Java

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

Java Read Files

자바 파일 읽기 (Java Read Files)

자바에서 파일을 읽는 작업은 다양한 방법을 통해 수행될 수 있습니다. 파일을 읽는 주요 방법으로는 FileReader, BufferedReader, Scanner, 그리고 Files 클래스 등이 있습니다. 각각의 방법은 상황에 맞게 선택할 수 있으며, 파일의 크기나 처리 속도에 따라 적합한 방식이 다를 수 있습니다.

1. FileReader를 사용한 파일 읽기

FileReader 클래스는 자바에서 파일을 읽는 기본적인 방법 중 하나입니다. 문자 기반 스트림으로 텍스트 파일을 읽기에 적합합니다. 하지만, 대용량 파일을 처리할 때는 **BufferedReader**와 같이 버퍼링을 지원하는 클래스를 사용하는 것이 좋습니다.

1.1 FileReader 사용 예제

import java.io.FileReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        try {
            FileReader reader = new FileReader("example.txt");

            int character;
            // 한 문자씩 파일을 읽음
            while ((character = reader.read()) != -1) {
                System.out.print((char) character);
            }

            reader.close();
        } catch (IOException e) {
            System.out.println("파일을 읽는 중 오류가 발생했습니다.");
            e.printStackTrace();
        }
    }
}

설명:

  • read() 메서드는 파일에서 한 문자를 읽고, 더 이상 읽을 문자가 없으면 1을 반환합니다.
  • 파일을 문자 단위로 읽기 때문에 대용량 파일에는 적합하지 않을 수 있습니다.

2. BufferedReader를 사용한 파일 읽기

  • *BufferedReader*는 파일을 더 효율적으로 읽기 위해 버퍼링을 지원하는 클래스입니다. 이 클래스는 한 번에 여러 문자를 읽어 처리 속도가 빠르고, 줄 단위로 파일을 읽을 수 있는 기능을 제공합니다.

2.1 BufferedReader 사용 예제

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new FileReader("example.txt"));
            String line;

            // 줄 단위로 파일을 읽음
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            reader.close();
        } catch (IOException e) {
            System.out.println("파일을 읽는 중 오류가 발생했습니다.");
            e.printStackTrace();
        }
    }
}

설명:

  • readLine() 메서드는 파일에서 한 줄씩 읽습니다. 읽을 줄이 없으면 **null*을 반환합니다.
  • 대용량 파일 처리에 적합하며, 파일을 줄 단위로 처리할 수 있습니다.

3. Scanner 클래스를 사용한 파일 읽기

Scanner 클래스는 파일을 읽을 때 토큰 단위로 처리할 수 있는 기능을 제공합니다. 주로 텍스트 파일에서 특정 패턴이나 형식에 맞춰 데이터를 추출할 때 유용합니다.

3.1 Scanner 사용 예제

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        try {
            File file = new File("example.txt");
            Scanner scanner = new Scanner(file);

            // 파일의 모든 줄을 읽음
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                System.out.println(line);
            }

            scanner.close();
        } catch (FileNotFoundException e) {
            System.out.println("파일을 찾을 수 없습니다.");
            e.printStackTrace();
        }
    }
}

설명:

  • hasNextLine(): 파일에서 다음 줄이 있는지 확인하는 메서드로, 파일의 끝까지 반복적으로 읽을 수 있습니다.
  • *Scanner*는 형식화된 데이터를 읽는 데 유용하며, 정수, 문자열, 공백 등 특정 패턴을 기준으로 데이터를 처리할 수 있습니다.

4. Files 클래스를 사용한 파일 읽기

자바 7에서 도입된

.nio.file.Files 클래스는 간편하게 파일을 읽고 쓸 수 있는 유틸리티 메서드를 제공합니다. 이 클래스는 파일의 모든 내용을 한 번에 읽어 리스트문자열로 반환할 수 있습니다.

4.1 Files.readAllLines() 사용 예제

Files.readAllLines() 메서드는 파일의 모든 줄을 리스트로 읽습니다.

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        try {
            // 파일의 모든 줄을 리스트로 읽음
            List<String> lines = Files.readAllLines(Paths.get("example.txt"));

            for (String line : lines) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.out.println("파일을 읽는 중 오류가 발생했습니다.");
            e.printStackTrace();
        }
    }
}

설명:

  • readAllLines(): 파일의 모든 줄을 읽어서 리스트로 반환합니다. 파일이 매우 클 경우 메모리 문제를 일으킬 수 있으므로 적당한 크기의 파일에 사용해야 합니다.

4.2 Files.readAllBytes() 사용 예제

Files.readAllBytes() 메서드는 파일을 바이트 배열로 읽어옵니다. 이 방법은 텍스트 파일뿐만 아니라 바이너리 파일에도 유용합니다.

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class Main {
    public static void main(String[] args) {
        try {
            // 파일의 모든 내용을 바이트 배열로 읽음
            byte[] bytes = Files.readAllBytes(Paths.get("example.txt"));

            // 바이트 배열을 문자열로 변환하여 출력
            String content = new String(bytes);
            System.out.println(content);
        } catch (IOException e) {
            System.out.println("파일을 읽는 중 오류가 발생했습니다.");
            e.printStackTrace();
        }
    }
}

설명:

  • readAllBytes(): 파일을 바이트 배열로 읽습니다. 텍스트 파일뿐만 아니라 이미지나 비디오 같은 바이너리 파일에도 사용할 수 있습니다.

5. 파일 읽기 시 예외 처리

파일 읽기 작업에서는 **IOException**이나 FileNotFoundException 등의 예외가 발생할 수 있습니다. 파일이 존재하지 않거나, 읽기 권한이 없을 때 예외가 발생하므로 이를 처리하는 것이 중요합니다.

5.1 파일 예외 처리 예제

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new FileReader("nonexistent_file.txt"));
            String line;

            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            reader.close();
        } catch (IOException e) {
            System.out.println("파일을 읽는 중 오류가 발생했습니다: " + e.getMessage());
        }
    }
}

주요 예외:

  • FileNotFoundException: 파일이 존재하지 않을 때 발생.
  • IOException: 파일 입출력 작업 중에 발생하는 일반적인 예외.

6. 파일 읽기 방법 요약

자바에서 파일을 읽는 방법은 다양한 방식으로 제공되며, 파일 크기와 성능 요구 사항에 따라 적합한 방법을 선택해야 합니다.

방법 장점 단점
FileReader 문자 단위로 파일을 읽기 쉽고 간단 대용량 파일에는 성능이 저하될 수 있음
BufferedReader 버퍼링을 통해 성능이 개선, 줄 단위로 읽기 약간의 추가 메모리 사용
Scanner 텍스트 파일에서 토큰 단위로 데이터를 읽기 대규모 파일 처리에 비효율적일 수 있음
Files 클래스 전체 파일을 한 번에 읽어 처리 매우 큰 파일 처리 시 메모리 문제 발생

요약

  • *FileReader*는 텍스트 파일을 읽을 때 사용할 수 있지만, 큰 파일에는 적합하지 않을 수 있습니다.
  • *BufferedReader*는 버퍼링을 사용하여 파일을 줄 단위로 효율적으로 읽습니다.
  • *Scanner*는 파일을 형식화된 방법으로 읽을 때 유용하며, 데이터를 토큰 단위로 처리할 수 있습니다.
  • Files 클래스는 자바 7부터 제공되며, 파일을 간편하게 읽고 쓸 수 있는 유틸리티 메서드를 제공합니다.

각 방법의 특성에 맞

게 파일을 읽고 처리할 수 있으며, 파일 크기와 형식에 따라 적절한 방식을 선택하여 사용할 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com