1) 예외(exception)
- 정상적인 프로그램 실행과정에서 발생할 수 있는 에러
- 예외를 프로그램에서 처리하면 프로그램의 안정성이 높아지고 견고해 짐
- 대표적인 예외 사례
파일을 읽어야 하는데 파일이 없는 경우, 네트워크 응답이 없는 경우
- 예외를 처리하기 위한 클래스
Throwable 클래스를 상속받은 Exception 클래스가 최상위 클래스
예외 클래스 이름 : xxxException
2) 예외 발생 및 처리 순서
- 프로그램 실행 중 예외가 발생
- JVM이 해당 예외에 대한 xxxException 클래스의 객체를 생성하여 프로그램에 던짐
- 프로그램에서 xxxException 객체를 받아서 처리
3) try~catch~finally 문
- try 블록 : 예외가 발생할 가능성이 있는 코드
- catch 블록 : 예외 처리
- finally 블록 : 예외 발생 여부와 상관없이 실행, 생략해도 됨
4) throws 문
- 예외를 던지는 명령문
- throws 문이 정의된 메소드
5) 예외 정보 출력하기
- printStackTrace() : 예외 발생 메소드의 정보와 위치, 원인을 화면에 출력
- getMessage() : 예외 발생 원인을 문자열로 반환
1) 입출력 스트림(stream)
- 데이터의 흐름을 시냇물처럼 물 흐르듯이 처리하는 것
- 입출력 스트림의 종류
바이트 입출력 스트림 : 바이트(byte) 단위로 입출력하는 스트림
문자 입출력 스트림 : 문자 단위로 입출력하는 스트림- 입출력 스트림 클래스
패키지 : java.io
입력용과 출력용 클래스로 나누어져 있음
2) InputStream/OutputStream
- 표준 입출력 스트림
표준 입력 : System 클래스의 in 멤버변수(필드)
표준 출력 : System 클래스의 out 멤버변수(필드)
3) FileInputStream/FileOutputStream
- File 클래스 : 파일을 접근하기 위한 클래스
- FileInputStream/FileOutputStream : File 클래스의 객체를 이용하여 스트림 객체를 생성함
4) BufferedInputStream/BufferedOutputStream
- 버퍼가 있는 입출력 스트림
5) DataInputStream/DataOutputStream
- 기본 자료형을 입출력 할 수 있는 스트림
6) ObjectInputStream/ObjectOutputStream
- 객체 직렬화가 가능한 클래스의 객체를 입출력 할 수 있는 스트림
7) PrintStream
- 텍스트 기반으로 출력하는 스트림 클래스
1) 저장할 파일 이름을 입력 받으시오
2) 키보드에서 입력 받는 문자열들을 파일로 저장하시오
-'x'또는 'X'가 입력되면 입력 종료
3) 입력이 종료되면 파일에 저장하시오
4) 저장된 파일에서 읽어와 화면에 내용을 출력하시오
package kbdfile;
import java.io.*;
public class KbdFile {
BufferedReader kbd; // 키보드 입력
String saveName; // 저장할 파일이름
public KbdFile() {
Reader r = new InputStreamReader(System.in);
kbd = new BufferedReader(r);
}
public void readName() {
System.out.print("저장할 파일이름을 입력하세요 : ");
try {
saveName = kbd.readLine();
saveName = new String(saveName).trim();
} catch(IOException e) {
System.out.println("저장할 파일이름을 입력받는 중 에러가 발생했습니다.");
e.printStackTrace();
}
}
public void readSaveData() {
String line = "";
System.out.println("저장할 데이터를 입력하세요~종료(x,X)");
try {
File f = new File(saveName);
PrintWriter save = new PrintWriter(f);
while( (line = kbd.readLine()) != null ) {
if( line.equals("x") || line.equals("X")) break;
save.println(line);
}
save.flush();
save.close();
System.out.println(saveName+ " : 저장 성공!! ");
} catch(IOException e) {
System.out.println("저장할 데이터를 입력받는아 저장하는 중 에러가 발생했습니다.");
e.printStackTrace();
}
}
public void readFile() {
System.out.println(saveName + " : 읽어오기");
String line = "";
try {
File f = new File(saveName);
FileReader fr = new FileReader(f);
BufferedReader file = new BufferedReader(fr);
while( (line = file.readLine()) != null ) {
System.out.println(line);
}
file.close();
fr.close();
} catch(IOException e) {
System.out.println("파일에서 데이터를 읽어오는 중 에러가 발생했습니다.");
e.printStackTrace();
}
}
public void closeStream() {
try {
kbd.close();
} catch(IOException e) {
System.out.println("키보드 스트림 닫기 중 에러가 발생했습니다.");
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
KbdFile kf = new KbdFile();
kf.readName();
kf.readSaveData();
kf.readFile();
kf.closeStream();
}
}
<Result>
저장할 파일이름을 입력하세요 : abc.txt
저장할 데이터를 입력하세요~종료(x,X)
자바 프로그래밍
Java Programming
x
abc.txt : 저장 성공!!
abc.txt : 읽어오기
자바 프로그래밍
Java Programming