IOException
(입출력 예외, Input/Output Exception)은 파일, 네트워크, 데이터 스트림 등의 입출력 작업 중 발생할 수 있는 예외입니다.
Java의 java.io
패키지에서 제공되며, Checked Exception(검사 예외)에 속하므로 반드시 예외 처리를 해야 합니다.
✅ 파일 읽기/쓰기 작업 중 오류 발생
✅ 네트워크 연결 문제로 인한 입출력 오류
✅ Checked Exception → try-catch
또는 throws
필수
📌 IOException
이 발생하면 파일을 읽거나 쓰는 작업이 정상적으로 수행되지 않음.
FileNotFoundException
)import java.io.*;
public class IOExceptionExample {
public static void main(String[] args) {
try {
FileReader file = new FileReader("non_existing_file.txt"); // 파일이 없으면 예외 발생
} catch (IOException e) {
System.out.println("파일을 찾을 수 없습니다: " + e.getMessage());
}
}
}
📌 파일이 존재하지 않으면 FileNotFoundException
이 발생하며, IOException
의 하위 클래스임.
import java.io.*;
public class IOExceptionExample {
public static void main(String[] args) {
try {
FileWriter writer = new FileWriter("output.txt");
writer.write("Hello, World!");
writer.close(); // close()를 안 하면 예외 발생 가능
} catch (IOException e) {
System.out.println("파일 입출력 중 오류 발생: " + e.getMessage());
}
}
}
📌 파일에 쓰기(write) 작업을 하는 도중 예외가 발생할 수 있음.
import java.io.*;
import java.net.*;
public class IOExceptionExample {
public static void main(String[] args) {
try {
URL url = new URL("http://invalid-url.com"); // 존재하지 않는 URL
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
} catch (IOException e) {
System.out.println("네트워크 오류 발생: " + e.getMessage());
}
}
}
📌 인터넷 연결 문제나 잘못된 URL로 인해 IOException
이 발생할 수 있음.
import java.io.*;
public class IOExceptionExample {
public static void main(String[] args) {
try {
FileInputStream inputStream = new FileInputStream("input.txt");
inputStream.close(); // 이미 닫은 스트림을 다시 사용하려 하면 예외 발생
int data = inputStream.read(); // IOException 발생!
} catch (IOException e) {
System.out.println("스트림 오류 발생: " + e.getMessage());
}
}
}
📌 스트림을 닫은 후 다시 접근하면 IOException
발생.
try-catch
로 예외 처리try {
FileReader file = new FileReader("data.txt");
} catch (IOException e) {
System.out.println("예외 발생: " + e.getMessage());
}
📌 try-catch
를 사용하여 예외가 발생해도 프로그램이 종료되지 않도록 처리.
throws
로 호출한 메서드에 예외 위임import java.io.*;
public class IOExceptionExample {
public static void readFile() throws IOException {
FileReader file = new FileReader("data.txt");
}
public static void main(String[] args) {
try {
readFile();
} catch (IOException e) {
System.out.println("예외 처리: " + e.getMessage());
}
}
}
📌 throws
를 사용하여 예외를 호출한 곳에서 처리하도록 위임할 수 있음.
try-with-resources
(Java 7+)import java.io.*;
public class IOExceptionExample {
public static void main(String[] args) {
try (FileReader file = new FileReader("data.txt");
BufferedReader reader = new BufferedReader(file)) {
System.out.println(reader.readLine());
} catch (IOException e) {
System.out.println("예외 발생: " + e.getMessage());
}
}
}
📌 try-with-resources
를 사용하면 close()
를 명시적으로 호출하지 않아도 자동으로 리소스 해제 가능.
📌 IOException
은 Java의 여러 입출력 관련 예외의 부모 클래스!
java.lang.Exception
└── java.io.IOException
├── java.io.FileNotFoundException (파일이 없음)
├── java.net.SocketException (네트워크 오류)
├── java.io.EOFException (파일 끝에 도달)
├── java.io.InterruptedIOException (I/O 작업 중 인터럽트 발생)
✅ 자주 발생하는 IOException
하위 클래스
| 예외 클래스 | 설명 |
|------------|--------------------------------|
| FileNotFoundException
| 파일이 존재하지 않을 때 발생 |
| SocketException
| 네트워크 연결 오류 |
| EOFException
| 파일 끝(End of File) 도달 시 발생 |
| InterruptedIOException
| I/O 작업이 인터럽트될 때 발생 |
클래스 | 발생 가능 예외 |
---|---|
FileReader , FileWriter | FileNotFoundException , IOException |
BufferedReader , BufferedWriter | IOException |
FileInputStream , FileOutputStream | IOException |
Socket , ServerSocket | SocketException , IOException |
HttpURLConnection | IOException |
📌 입출력과 관련된 거의 모든 API에서 IOException
이 발생할 가능성이 있음.
비교 항목 | IOException (Checked Exception) | RuntimeException (Unchecked Exception) |
---|---|---|
예외 처리 필요 여부 | ✅ try-catch 또는 throws 필요 | ❌ 예외 처리를 강제하지 않음 |
발생 원인 | 파일, 네트워크, 입출력 관련 오류 | 프로그래밍 실수 (NPE, IndexOutOfBounds 등) |
예제 | FileReader , Socket , BufferedReader | NullPointerException , ArrayIndexOutOfBoundsException |
📌 IOException
은 Checked Exception이므로 반드시 예외 처리가 필요!
📌 Unchecked Exception (RuntimeException
하위 클래스)와는 다르게 try-catch
가 필수!
✅ IOException
은 파일, 네트워크, 스트림 등의 입출력 작업에서 발생하는 예외
✅ Checked Exception이므로 반드시 try-catch
또는 throws
를 사용해야 함
✅ 파일이 없거나, 네트워크 문제가 발생하거나, 스트림이 닫힌 경우 발생할 수 있음
✅ 자주 발생하는 FileNotFoundException
, SocketException
등과 함께 사용됨
추가 학습 자료