자바에서 파일을 읽고 쓰는 방법은 무엇인가요?

자바(Java)에서 파일을 읽고 쓰는 방법에는 여러 가지가 있으며, 주로 `java.io` 패키지와 `java.nio` 패키지를 사용합니다.

여기서는 기본적인 파일 읽기 및 쓰기 방법을 예제와 함께 설명하겠습니다.

--- 1. 파일 읽기 1-1. `FileReader`와 `BufferedReader` 사용하기 (텍스트 파일 읽기) ```java import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class FileReadExample { public static void main(String[] args) { String filePath = "example.txt"; try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } } } ``` - `FileReader`는 문자 단위로 파일을 읽습니다.

- `BufferedReader`는 버퍼를 사용하여 라인 단위로 읽을 때 효율적입니다.

- `try-with-resources` 문을 사용하여 자원을 자동으로 해제합니다.

1-2. `Files` 클래스 사용하기 (Java 7 이후) ```java import java.nio.file.Files; import java.nio.file.Paths; import java.io.IOException; import java.util.List; public class FileReadExampleNIO { public static void main(String[] args) { String filePath = "example.txt"; try { List lines = Files.readAllLines(Paths.get(filePath)); for(String line : lines) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } } } ``` - `Files.readAllLines()`는 모든 라인을 한 번에 읽어 `List`으로 반환합니다.

- 간단한 텍스트 파일 읽기에 적합합니다.

--- 2. 파일 쓰기 2-1. `FileWriter`와 `BufferedWriter` 사용하기 (텍스트 파일 쓰기) ```java import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class FileWriteExample { public static void main(String[] args) { String filePath = "output.txt"; try (BufferedWriter bw = new BufferedWriter(new FileWriter(filePath))) { bw.write("안녕하세요, 자바 파일 쓰기 예제입니다.

"); bw.newLine(); // 개행 bw.write("두 번째 줄입니다.

"); } catch (IOException e) { e.printStackTrace(); } } } ``` - `FileWriter`는 문자 단위로 파일을 씁니다.

- `BufferedWriter`와 함께 사용하면 효율적으로 쓸 수 있습니다.

2-2. `Files` 클래스 사용하기 (Java 7 이후) ```java import java.nio.file.Files; import java.nio.file.Paths; import java.io.IOException; import java.util.Arrays; import java.util.List; public class FileWriteExampleNIO { public static void main(String[] args) { String filePath = "output.txt"; List lines = Arrays.asList("첫 번째 줄", "두 번째 줄"); try { Files.write(Paths.get(filePath), lines); } catch (IOException e) { e.printStackTrace(); } } } ``` - `Files.write()`는 `List` 또는 바이트 배열을 파일에 쓸 수 있습니다.

- 매우 간단하게 파일 쓰기를 처리할 수 있습니다.

--- 3. 바이너리 파일 읽고 쓰기 파일 읽기 ```java import java.io.FileInputStream; import java.io.IOException; public class FileBinaryReadExample { public static void main(String[] args) { String filePath = "image.jpg"; try (FileInputStream fis = new FileInputStream(filePath)) { byte[] buffer = new byte[1024]; int bytesRead; while((bytesRead = fis.read(buffer)) != -1) { // buffer에 bytesRead 만큼의 데이터가 읽힘 // 예: 다른 스트림으로 쓰거나 처리 가능 } } catch(IOException e) { e.printStackTrace(); } } } ``` 파일 쓰기 ```java import java.io.FileOutputStream; import java.io.IOException; public class FileBinaryWriteExample { public static void main(String[] args) { String filePath = "output.jpg"; byte[] data = {/* 바이너리 데이터 */}; try (FileOutputStream fos = new FileOutputStream(filePath)) { fos.write(data); } catch(IOException e) { e.printStackTrace(); } } } ``` - `FileInputStream`과 `FileOutputStream`은 바이트 단위로 파일을 읽고 씁니다.

- 이미지, 영상, 오디오 등 바이너리 파일 처리에 사용합니다.

--- 정리 | 작업 | 클래스 및 메서드 | 특징 | | ------------- | -------------------------------------- | ---------------------------- | | 텍스트 읽기 | `FileReader` + `BufferedReader` | 라인 단위 읽기, 간단 사용 | | | `Files.readAllLines(Path)` | 파일 전체 읽기, 편리 | | 텍스트 쓰기 | `FileWriter` + `BufferedWriter` | 문자 단위 쓰기 | | | `Files.write(Path, List)` | 간단하고 빠른 쓰기 | | 바이너리 읽기 | `FileInputStream` | 바이트 단위 읽기, 바이너리 파일 처리| | 바이너리 쓰기 | `FileOutputStream` | 바이트 단위 쓰기, 바이너리 파일 처리| --- 이 외에도 `Scanner`를 사용해 파일을 읽거나, `PrintWriter`로 쓰기도 하며, 자바 8 이상에서는 스트림(Stream)을 응용해서 효율적인 파일 처리가 가능합니다.

궁금하신 점 있으면 언제든 문의해주세요!


관련 게시글

자바에서 병렬 처리를 구현하는 방법은 무엇인가요?

자바에서 병렬 처리는 여러 작업을 동시에 실행하여 프로그램의 성능과 응답성을 향상시키는 기법입니다....

문제 해결 및 면접 질문

문제 해결 및 면접 질문에 관한 글 --- 1. 문제 해결의 중요성 문제 해결 능력은 개인과...

자바에서 중복된 요소를 제거하는 방법은 무엇인가요?

자바(Java)에서 중복된 요소를 제거하는 방법에는 여러 가지가 있습니다. 주로 컬렉션프레임워크를 활용하...

자바 Collections에서 정렬하는 방법은 무엇인가요?

자바 Collections에서 정렬하는 방법에 대해 설명드리겠습니다. 자바에서는 컬렉션(Collection) 자료구조의...

자바의 메모리 누수 문제를 해결하는 방법은 무엇인가요?

자바의 메모리 누수 문제를 해결하는 방법 --- 1. 메모리 누수란? 자바는 가비지 컬렉션(GC)...

팩토리 패턴을 사용하여 주어진 문제를 해결해보세요.

팩토리 패턴을 사용하여 주어진 문제를 해결해보세요. --- 1. 팩토리 패턴이란? 팩토리 패턴...