파일 입출력(Input/Output)은 Java 프로그램이 외부 파일과 데이터를 주고받는 데 사용하는 중요한 기능입니다. 이번 블로그에서는 Java에서 파일을 읽고 쓰는 방법을 단계별로 알아보고, 다양한 상황에 적용할 수 있는 실용적인 예제를 활용하여 알기 쉽게 작성 하였으니 참고가 되셨으면 좋겠습니다.
1. Java의 파일 입출력 기본 개념
Java는 파일 입출력을 위해 java.io
와 java.nio
패키지를 제공합니다.
- java.io: 전통적인 입출력 방식 제공 (스트림 기반).
- java.nio: 비동기 및 버퍼 기반 입출력을 제공하며, 성능이 향상됨.
2. 파일 쓰기 (Writing to a File)
파일에 데이터를 쓰는 방법에는 여러 가지가 있지만, 가장 간단한 방법 중 하나는 FileWriter
를 사용하는 것입니다.
FileWriter 예제
import java.io.*;
public class FileWriteExample {
public static void main(String[] args) {
try {
FileWriter writer = new FileWriter("example.txt");
writer.write("안녕하세요, Java 파일 입출력 예제입니다!\n");
writer.write("이 문장은 파일에 저장됩니다.");
writer.close();
System.out.println("파일 쓰기 완료.");
} catch (IOException e) {
System.out.println("파일 쓰기 중 오류 발생: " + e.getMessage());
}
}
}
출력: (example.txt 파일 내용)
안녕하세요, Java 파일 입출력 예제입니다!
이 문장은 파일에 저장됩니다.
BufferedWriter 사용: BufferedWriter
는 데이터를 버퍼에 저장한 뒤 한 번에 파일에 쓰므로 더 효율적입니다.
BufferedWriter writer = new BufferedWriter(new FileWriter("example.txt"));
writer.write("Hello, BufferedWriter!\n");
writer.close();
3. 파일 읽기 (Reading from a File)
파일을 읽는 가장 일반적인 방법은 FileReader
또는 BufferedReader
를 사용하는 것입니다.
BufferedReader 예제
import java.io.*;
public class FileReadExample {
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());
}
}
}
출력: (example.txt 파일 내용 출력)
안녕하세요, Java 파일 입출력 예제입니다!
이 문장은 파일에 저장됩니다.
4. 파일 복사 예제
파일 입출력 기능을 활용해 파일을 복사하는 방법도 구현할 수 있습니다.
import java.io.*;
public class FileCopyExample {
public static void main(String[] args) {
try (FileInputStream in = new FileInputStream("source.txt");
FileOutputStream out = new FileOutputStream("destination.txt")) {
int data;
while ((data = in.read()) != -1) {
out.write(data);
}
System.out.println("파일 복사 완료.");
} catch (IOException e) {
System.out.println("파일 복사 중 오류 발생: " + e.getMessage());
}
}
}
5. 최신 Java 기능 활용: Files
클래스
Java NIO의 Files
클래스는 파일 읽기, 쓰기, 복사 등 다양한 작업을 간단하게 수행할 수 있도록 도와줍니다.
- 파일 쓰기:
import java.nio.file.*;
import java.io.IOException;
public class NIOWriteExample {
public static void main(String[] args) {
try {
Path path = Paths.get("example_nio.txt");
Files.write(path, "Hello, NIO!\nThis is an example.".getBytes());
System.out.println("파일 쓰기 완료.");
} catch (IOException e) {
System.out.println("NIO 파일 쓰기 중 오류 발생: " + e.getMessage());
}
}
}
- 파일 읽기
import java.nio.file.*;
import java.io.IOException;
public class NIOReadExample {
public static void main(String[] args) {
try {
Path path = Paths.get("example_nio.txt");
String content = Files.readString(path);
System.out.println(content);
} catch (IOException e) {
System.out.println("NIO 파일 읽기 중 오류 발생: " + e.getMessage());
}
}
}
6. 파일 입출력 시 주의사항
- 예외 처리:
- 항상
try-catch
를 사용하여 예외를 처리합니다.
- 항상
- 자원 관리:
- 파일 스트림을 사용할 때는
close()
를 호출하여 자원을 해제하거나,try-with-resources
구문을 사용하여 자동으로 닫아야 합니다.
- 파일 스트림을 사용할 때는
- 파일 경로:
- 상대 경로와 절대 경로를 혼동하지 않도록 주의하세요.
결론
Java에서의 파일 입출력은 다양한 방식으로 구현할 수 있으며, java.io
와 java.nio
패키지를 통해 효율적인 파일 작업이 가능합니다. 프로젝트의 요구사항에 맞는 방법을 선택하여 안정적이고 성능이 뛰어난 파일 처리를 구현이 가능합니다.
다음 블로그는 Java의 JVM(Java Virtual Machine)의 메모리 관리와 성능 최적화에 대해 작성해보겠습니다. 감사합니다.