새소식

반응형
Programming Language/Java

[Java] 자바 EOF(End Of File) 처리

  • -
반응형

자바 로고 이미지입니다.
자바

자바 EOF(End Of File) 처리


EOF는 End of File의 약어로, 파일의 끝을 나타내는 특수한 마커이다. 파일에서 더 이상 읽을 내용이 없거나 쓸 내용이 없을 때, EOF 마커가 나타나며, 이는 파일의 끝을 나타내어 프로그램에게 파일의 끝을 인식할 수 있게 한다. 

 

EOF는 주로 파일 읽기나 입력 소스에서 데이터를 읽을 때 사용된다. 예를 들어, 파일의 끝에 도달했을 때 반복문을 종료하는 데 사용할 수 있다. 파일에서 데이터를 읽을 때 EOF를 확인하여 계속해서 읽을지, 아니면 종료할지 결정할 수 있다.

 

파일의 끝은 파일의 끝 부분이 아닌, 파일에서 더 이상 읽을 데이터가 없는 지점을 나타낸다. 파일에서 EOF를 확인하는 방법은 프로그래밍 언어나 도구에 따라 다를 수 있다. 대표적으로 파일 읽기 함수에서 EOF를 확인하는 방법도 있다.

 

자바에서는 EOF(End of File)를 확인하는 데 사용되는 메커니즘이 있다. 주로 파일 읽기, 입력 스트림에서 사용된다. 자바에서 EOF를 확인하기 위해 사용되는 주요 메서드와 클래스는 아래와 같다. 한 번 살펴보자.

 

InputStream.read() 메서드

InputStream 클래스를 사용하여 파일 또는 다른 입력 소스에서 데이터를 읽을 때 read() 메서드를 사용한다. read() 메서드는 더 이상 읽을 데이터가 없을 때 -1을 반환하므로, 이를 이용하여 EOF를 확인할 수 있다.

InputStream inputStream = new FileInputStream("example.txt");
int data;

while ((data = inputStream.read()) != -1) {
    // 파일의 끝에 도달하기 전까지 데이터를 읽음
    // data에 읽은 바이트가 저장되며, 파일의 끝에 도달하면 -1이 반환됨
}

inputStream.close();

 

 

BufferedReader.readLine() 메서드

BufferedReader 클래스를 사용하여 한 줄씩 문자열을 읽을 때 readLine() 메서드를 사용한다. 더 이상 읽을 데이터가 없을 때 null을 반환하므로, 이를 이용하여 EOF를 확인할 수 있다.

BufferedReader bufferedReader = new BufferedReader(new FileReader("example.txt"));
String line;

while ((line = bufferedReader.readLine()) != null) {
    // 파일의 끝에 도달하기 전까지 한 줄씩 읽음
    // line에 읽은 문자열이 저장되며, 파일의 끝에 도달하면 null이 반환됨
}

bufferedReader.close();

 

 

Scanner 클래스

사용자 입력에서 EOF를 확인하는 것은 주로 특정 조건에 도달할 때까지 입력을 계속해서 받는 방식으로 이루어진다. 자바에서는 보통 Scanner 클래스를 사용하여 사용자로부터 입력을 받는다. 

import java.util.Scanner;

public class UserInputEOFExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("Enter lines of text (Ctrl+D or Ctrl+Z to exit)");

        while (scanner.hasNextLine()) {
            // hasNextLine()은 더 이상 읽을 줄이 없을 때 false를 반환하므로, 이를 이용하여 루프를 종료.
            String line = scanner.nextLine();
            System.out.println("You entered : " + line);
        }

        scanner.close();
    }
}

사용자로부터 여러 줄의 텍스트를 입력받고, 사용자가 EOF 조건인 Ctrl + D(Unix/Linux) 또는 Ctrl + Z(Windows)를 입력할 때까지 계속해서 입력을 받는다. 사용자 입력에서 EOF를 확인하는 데는 hasNextLine() 메서드가 사용되었다.

 

📢 Windows에서 입력 종료를 위해 Ctrl + Z가 안된다면 Ctrl + D로 시도해 보자.

 

BufferedReader 클래스

자바에서 Scanner 클래스 외에도 BufferedReader 클래스를 사용하여 사용자 입력을 받고 EOF를 확인할 수 있다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
    public static void main(String[] args){
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Enter lines of text (Ctrl+D or Ctrl+Z to exit) : ");

        try {
            String line;
            while ((line = reader.readLine()) != null) {
                // readLine()이 null을 반환하면 EOF 조건입니다.
                System.out.println("You entered : " + line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

BufferedReader를 사용하여 사용자로부터 한 줄씩 입력을 받고, readLine() 메서드가 null을 반환할 때까지 계속해서 입력을 받는다. 사용자 입력에서 EOF를 확인하는 데에는 readLine() 메서드가 null을 반환하는 조건을 사용한다.

 

마찬가지로 입력 종료를 위해 Ctrl + D 혹은 Ctrl + Z를 눌러보자.

 

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.