
Throwable
Error (복구X)
Exception
RuntimeException 계열: 런타임에 발생, 선택적 처리RuntimeException// ArithmeticException: 0으로 나눔
int x = 3 / 0;
// ArrayIndexOutOfBoundsException: 인덱스 초과
int[] arr = new int[0];
System.out.println(arr[1]);
// NullPointerException: null 접근
int[] a = null;
System.out.println(a[0]);
// ClassCastException: 잘못된 캐스팅
Object o = "hello";
Integer i = (Integer) o;
// NegativeArraySizeException: 음수 길이 배열
int[] bad = new int[-1];
throws로 상위에 위임void readFile() throws IOException { /* ... */ }
try-catch(-finally)로 직접 처리try {
// 예외 가능 코드
} catch (FileNotFoundException e) { // 구체적인 것 먼저
// ...
} catch (IOException e) { // 상위 타입은 나중에
// ...
} finally {
// 예외와 무관하게 반드시 실행(자원 반납 등)
}
class Super { void m() throws IOException {} }
class Sub extends Super {
@Override void m() throws FileNotFoundException {} // OK (하위)
// @Override void m() throws Exception {} // X (상위)
}
try-with-resources (자바 7+)AutoCloseable 자원은 자동 close() + 내부적으로 flush()try (BufferedReader in = new BufferedReader(new FileReader("test.dat"))) {
String s;
while((s = in.readLine()) != null) System.out.println(s);
} catch (IOException e) { e.printStackTrace(); }
File f = new File("C:/data/file.txt");
f.createNewFile(); // 파일 생성
f.delete(); // 삭제
f.isFile(); // 파일 여부
f.isDirectory(); // 디렉토리 여부
f.length(); // 크기(byte)
f.getName(); f.getPath(); f.getAbsolutePath(); f.getParent();
| 분류 | 메소드 | 설명 |
|---|---|---|
| 생성/삭제 | createNewFile() / mkdir() / mkdirs() / delete() | 파일·디렉토리 생성/삭제 |
| 속성 | canRead()/canWrite()/canExecute() | 접근 가능 여부 |
| 정보 | isFile()/isDirectory()/isHidden() | 타입/숨김 |
| 메타 | length()/lastModified() | 크기/수정시각 |
InputStream / OutputStream// FileInputStream: 바이트 읽기
try (FileInputStream fin = new FileInputStream("in.bin")) {
int b;
while((b = fin.read()) != -1) System.out.println(b);
// 파일 전체를 배열로
byte[] buf = fin.readAllBytes(); // (자바 9+) 또는 length()로 크기만큼 배열 생성 후 read()
}
// FileOutputStream: 바이트 쓰기
try (FileOutputStream fout = new FileOutputStream("out.bin")) {
fout.write(97); // 'a'
fout.write(new byte[]{98,99,100}); // b c d
// 이어쓰기: new FileOutputStream("out.bin", true)
}
다국어 텍스트는 바이트 스트림으로 읽으면 깨짐. → 문자 스트림 사용!
Reader / Writer// FileReader: 문자 읽기
try (FileReader fr = new FileReader("in.txt")) {
char[] cbuf = new char[1024];
int n;
while((n = fr.read(cbuf)) != -1) System.out.print(new String(cbuf, 0, n));
}
// FileWriter: 문자 쓰기
try (FileWriter fw = new FileWriter("out.txt")) {
fw.write('A');
fw.write(new char[]{'a','p','p','l','e'});
fw.write("우리나라 대한민국");
}
기반 스트림에 덧씌워 기능 향상. 단독 사용 불가.
BufferedReader / BufferedWriter// 쓰기
try (BufferedWriter bw = new BufferedWriter(new FileWriter("buf.txt"))) {
bw.write("안녕하세요"); bw.newLine();
bw.write("반갑습니다");
bw.flush(); // 남은 데이터 강제 전송(종료 전 close가 flush 수행)
}
// 읽기: 라인 단위
try (BufferedReader br = new BufferedReader(new FileReader("buf.txt"))) {
String line;
while((line = br.readLine()) != null) System.out.println(line);
}
InputStreamReader / OutputStreamWriter// 콘솔 입력(문자)
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
System.out.print("문자열 입력: ");
String s = br.readLine();
System.out.println("value: " + s);
}
// 콘솔 출력(문자)
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out))) {
bw.write("java oracle jdbc"); bw.flush();
}
DataInputStream / DataOutputStream// 기록 (형 보존)
try (DataOutputStream out = new DataOutputStream(new FileOutputStream("score.bin"))) {
out.writeUTF("홍길동"); out.writeInt(95); out.writeChar('A');
}
// 읽기 (기록한 **순서대로** 읽어야 함)
try (DataInputStream in = new DataInputStream(new FileInputStream("score.bin"))) {
while (true) System.out.println(in.readUTF()+", "+in.readInt()+", "+in.readChar());
} catch (EOFException e) {
System.out.println("파일 읽기 완료!");
}
ObjectInputStream / ObjectOutputStream// DTO는 반드시 implements Serializable
try (ObjectOutputStream oos =
new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("mem.obj")))) {
oos.writeObject(new MemberDTO(/*...*/)); oos.flush();
}
try (ObjectInputStream ois =
new ObjectInputStream(new BufferedInputStream(new FileInputStream("mem.obj")))) {
while(true) System.out.println((MemberDTO) ois.readObject());
} catch (EOFException e) { System.out.println("끝"); }
직렬화 미지정 시
NotSerializableException발생
try-with-resources 권장(자동 close/flush)Buffered 조합equals/hashCode처럼, throws 오버라이딩은 부모보다 좁게// 읽기(문자)
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
for (String line; (line = br.readLine()) != null; ) { /* use line */ }
}
// 쓰기(문자)
try (BufferedWriter bw = new BufferedWriter(new FileWriter(path))) {
bw.write(content); // bw.newLine();
}
// 읽기(바이트)
try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(path))) {
byte[] buf = in.readAllBytes(); // (자바 9+)
}
// 쓰기(바이트)
try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(path))) {
out.write(bytes); out.flush();
}