[Java] Try with resources로 여러 파일 열기/닫기
June 30, 2024
Try with resources는 파일을 사용하고 자원을 해제할 때, 명시적으로 해제하지 않아도 자동으로 해제해줍니다. 이 방식은 파일을 읽을 때 자원 해제 코드를 따로 구현해줄 필요가 없어서 자주 사용하고 있습니다.
이 글에서 try-with-resources
구문을 사용하는 이유와, 여러 파일을 동시에 사용하는 방법에 대해서 알아보겠습니다.
1. try-with-resources가 없을 때 발생하는 일
만약 try-with-resources
를 사용하지 않으면, 아래 예제처럼 try-catch-finally
구분을 사용하여 파일을 열고 닫아야 합니다.
- BufferedReader로 파일 열었으면, 꼭 닫아줘야 함
- 일반적으로 try에서 파일을 열면 finally 구문에서
close()
를 호출하여 파일을 닫음 - 파일을 닫을 때 try-catch로 IOException의 예외 처리를 추가해야해서 코드가 길어짐, 또한 실수로 파일 닫는 것을 잊어먹을 수 있음
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Example {
public static void main(String[] args) {
String filePath = "sample.txt";
BufferedReader bufferedReader = null;
try {
// 파일 열기
FileReader fileReader = new FileReader(filePath);
bufferedReader = new BufferedReader(fileReader);
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 파일 닫기
if (bufferedReader != null) {
bufferedReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2. try-with-resources로 파일 1개 열기
다음과 같이 try-with-resources
를 사용하여 위의 예제를 다시 구현해보았습니다.
try-with-resources
의 구문이 끝날 때, try(..)
에서 열은 파일은 자동으로 닫히기 때문에 finally
블록에서 추가로 파일을 닫는 코드를 구현할 필요가 없습니다.
try(....)
안에서 열은 파일은 try 구문이 종료될 때 자동 해제 됨try(....)
안에서 여러 줄로 코드를 작성할 때는;
로 코드를 구분해야 함. 마지막 라인에는;
를 입력하지 않음- 주의 :
try { }
안에서 열은 파일은 try 구문이 종료될 때 해제 안됨, 꼭try (...)
에서 열어야 함
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Example {
public static void main(String[] args) {
String filePath = "sample.txt";
try (
// 파일을 열고 BufferedReader로 읽기
FileReader fileReader = new FileReader(filePath);
BufferedReader bufferedReader = new BufferedReader(fileReader)
) {
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
3. try-with-resources로 파일 2개 열기
아래 예제는 try-with-resources
에서 두개의 파일을 여는 예제입니다. 동일한 방식으로 2개 이상의 파일을 열 수 있습니다.
try 구문이 종료되면 여기서 열은 파일들은 자동으로 닫힙니다.
try (...)
에서 여러 파일을 열 수 있음- 예제는
sample.txt
파일을 읽고output.txt
파일에 같은 내용을 write - try 구문 종료 시, try에서 열은 2개의 파일은 자동으로 닫힘
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Example {
public static void main(String[] args) {
String inputFilePath = "sample.txt";
String outputFilePath = "output.txt";
try (
// 입력 파일을 열고 BufferedReader로 읽기
FileReader fileReader = new FileReader(inputFilePath);
BufferedReader bufferedReader = new BufferedReader(fileReader);
// 출력 파일을 열고 BufferedWriter로 쓰기
FileWriter fileWriter = new FileWriter(outputFilePath);
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter)
) {
String line;
while ((line = bufferedReader.readLine()) != null) {
// 읽은 데이터를 출력 파일에 쓰기
bufferedWriter.write(line);
bufferedWriter.newLine();
}
System.out.println("File copy completed.");
} catch (IOException e) {
e.printStackTrace();
}
}
}