본문 바로가기
IT/JAVA

Java에서 파일 입출력(IO) 다루기(File, FileReader, FileWriter, BufferedReader, BufferedWriter, FileInputStream, FileOutputStream)

by ohukohoh 2025. 3. 3.
728x90
반응형

Java에서는 파일을 읽고 쓰는 기능을 제공하는 파일 입출력(IO, Input/Output) API를 지원합니다. 파일 입출력은 데이터를 저장하고 불러오는 데 필수적인 기능이며, Java에서는

File, FileReader, FileWriter, BufferedReader, BufferedWriter, FileInputStream, FileOutputStream

 등의 클래스를 활용하여 파일을 다룰 수 있습니다.


1. Java 파일 입출력 개념

파일 입출력은 크게 **문자 기반(Reader/Writer)**과 **바이트 기반(InputStream/OutputStream)**으로 나뉩니다.

  • 문자 스트림(Reader/Writer): 텍스트 데이터를 처리할 때 사용 (FileReader, FileWriter 등)
  • 바이트 스트림(InputStream/OutputStream): 이미지, 오디오, 비디오 파일 등 바이너리 데이터를 처리할 때 사용 (FileInputStream, FileOutputStream 등)

2. 파일 생성 및 정보 확인

파일을 생성하고 해당 파일의 정보를 확인할 수 있습니다.

파일 생성 예제 (``** 클래스 사용)**

import java.io.File;
import java.io.IOException;

public class FileCreateExample {
    public static void main(String[] args) {
        try {
            File file = new File("example.txt");
            if (file.createNewFile()) {
                System.out.println("파일이 생성되었습니다: " + file.getName());
            } else {
                System.out.println("파일이 이미 존재합니다.");
            }
        } catch (IOException e) {
            System.out.println("파일 생성 중 오류 발생: " + e.getMessage());
        }
    }
}

출력 결과 (파일이 존재하지 않을 경우):

파일이 생성되었습니다: example.txt

🔹 File 클래스는 파일 생성, 삭제, 속성 확인 등의 작업을 수행할 수 있습니다.


3. 파일에 데이터 쓰기

파일에 데이터를 저장하려면 `` 또는 **BufferedWriter**를 사용할 수 있습니다.

파일 쓰기 예제 (``)

import java.io.FileWriter;
import java.io.IOException;

public class FileWriteExample {
    public static void main(String[] args) {
        try {
            FileWriter writer = new FileWriter("example.txt");
            writer.write("Hello, Java 파일 입출력!");
            writer.close();
            System.out.println("파일에 데이터가 저장되었습니다.");
        } catch (IOException e) {
            System.out.println("파일 쓰기 중 오류 발생: " + e.getMessage());
        }
    }
}

출력 결과:

파일에 데이터가 저장되었습니다.

🔹 FileWriter파일이 존재하지 않으면 자동으로 생성하며, 기존 파일에 데이터를 덮어씁니다.

버퍼를 사용한 파일 쓰기 (``)

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedWriteExample {
    public static void main(String[] args) {
        try {
            BufferedWriter writer = new BufferedWriter(new FileWriter("example.txt"));
            writer.write("안녕하세요, BufferedWriter를 사용하여 파일을 작성합니다.");
            writer.newLine(); // 줄바꿈 추가
            writer.write("Java 파일 입출력은 쉽습니다!");
            writer.close();
            System.out.println("파일에 데이터가 저장되었습니다.");
        } catch (IOException e) {
            System.out.println("파일 쓰기 중 오류 발생: " + e.getMessage());
        }
    }
}

🔹 BufferedWriterFileWriter보다 더 효율적인 파일 쓰기 성능을 제공합니다.


4. 파일 읽기

파일에서 데이터를 읽을 때는 `` 또는 **BufferedReader**를 사용할 수 있습니다.

파일 읽기 예제 (``)

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

public class FileReadExample {
    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.getMessage());
        }
    }
}

🔹 FileReader는 파일을 한 문자씩 읽는 방식으로 작동합니다.

버퍼를 사용한 파일 읽기 (``)

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

public class BufferedReadExample {
    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.getMessage());
        }
    }
}

🔹 BufferedReader는 파일을 한 줄씩 읽을 수 있어 성능이 향상됩니다.


5. 파일 삭제

파일을 삭제하려면 delete() 메서드를 사용할 수 있습니다.

파일 삭제 예제

import java.io.File;

public class FileDeleteExample {
    public static void main(String[] args) {
        File file = new File("example.txt");
        if (file.delete()) {
            System.out.println("파일이 삭제되었습니다: " + file.getName());
        } else {
            System.out.println("파일 삭제 실패");
        }
    }
}

🔹 파일이 존재하면 삭제되고, 존재하지 않으면 삭제 실패 메시지가 출력됩니다.


결론

  • 파일 쓰기: FileWriter, BufferedWriter
  • 파일 읽기: FileReader, BufferedReader
  • 파일 삭제: File.delete()
  • 버퍼를 사용하면 성능이 향상됨

파일 입출력은 데이터 저장 및 로깅에 필수적인 기능이며, 다양한 방식으로 활용할 수 있습니다. 🚀

728x90
반응형