예외처 리

프로그램 실행시 예측하지 못하는 상황이 발생하여 에러가 났을때 처리방법이다. Java는 예외가 발생하면 자동적으로 예외클래스의 오브젝트가 생성된다. 예외 클래스는 Exception 클래스와 그 서브 클래스가 있다.

try : 예외가 발생할 수 있는 처리 기술

catch : 예외의 종류를 나타내는 예외 오브젝트를 받음

finally : 예외가 일어나든 일어나지 않든 항상 실행됨. 생략가능

throws : 예외가 일어날 것 같은 메소드에 throws를 사용하여 예외 클래스를 지정함. 예외를 받아줄 catch문이 있어야 함.

class Main {

public static void main (String[] args) {

try {

back(args[0]);

} catch (Exception e) {

System.out.println("커맨드라인 인수가 없습니다.");

} finally {

System.out.println("종료합니다.");

}

}

static void back(String a) throws Exception {    // Exception은 예외 클래스명으로 Exception으로 기술하면 어떤 에러도 대응가능하다.

System.out.println(a);

}

}


스트림

파일을 읽고 쓸때 데이터의 흐름을 스트림이라고 하며 java에서는 파일을 읽고 쓰기 위해 스트림 전용 클래스로 생성된 오브젝트를 사용한다. 스트림은 취급하는 데이터에 따라 문자스트림과 바이트 스트림으로 나뉜다. 문자스트림은 16비트 유니코드 문자 데이터를 다루고 바이트 스트림은 8비트 데이터를 다룬다.

스트림 클래스는 추상 클래스의 서브 클래스로 되어있다.

스트림 

입력스트림 

출력스트림 

문자 스트림 

Reader 

Writer 

바이트 스트림 

InputStream 

OutputStream 


텍스트 파일 읽기

FileReader in = new FileReader("file1.txt");    // file1.txt 파일을 연다.

int c = in.read();        // 읽어온 문자를 int 형 정수로 변환한다. 읽을 데이터가 없으면 -1 을 리턴한다.

in.close();            // 파일을 닫는다.


import java.io.*;

class ReaderText {

public static void main(String[] args) {

try {

FileReader in = new FileReader(args[0]) ;

int c;

String s = new String();

while((c=in.read())!=-1)

s = s + (char)c;

System.out.print(s);

in.close();

} catch(IOException ie) {

System.out.println("File is not exist.");

} catch(Exception e) {

System.out.println("Error");

}

}

}


텍스트 파일 쓰기

FileWriter out = new FileWriter("file2.txt");    // file2.txt 이름의 파일을 생성한다. 같은 이름의 파일이 있을경우 덮어쓴다.

out.write("Hello\n");        // 데이터를 쓴다.

out.close();    //파일을 닫는다.


import java.io.*;

class WriteText {

public static void main(String[] args) {

try {

FileWriter out = new FileWriter("math.txt");    // math.txt 는 WriteText.java 와 동일 디렉토리에 생성됨

int a = 10, b = 5;

out.write(a + "+" + b + "=" + (a+b) + "\n");

out.close();

} catch(Exception e){

System.out.println(e);

}

}

}


바이너리 파일 읽기쓰기

바이너리 파일 읽기

FileInputStream in = new FileInputStream("file3.dat");    //바이너리 파일을 연다.

int c = in.read();    //읽은 1바이트 데이터를 int형 정수로 변환한다. 읽을 데이터가 없으면 -1을 리턴한다.

in.close();    // 파일을 닫는다.

바이너리 파일 쓰기

FileOutputStream out = new FileOutputStream("file4.dat");    // file4.dat 이름의 바이너리 파일을 생성한다.

out.write(65);    // 65를 쓴다.

out.close();    //파일을 닫는다.

바이트스트림 데이터를 문자로 읽기

FileInputStream ifile = new FileInputStream("file5.dat");

InputStreamReader in = new InputStreamReader(ifile);

바이트스트림 데이터를 문자로 쓰기

FileOutputStream ofile = new FileOutputStream("file5.dat");

OutputStreamWriter out = new OutputStreamWriter(ofile);

키보드 입력

키보드 문자 하나 입력받기

int a = System.in.read();

키보드 문자 행단위로 읽기

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String c = br.readLine();     // 읽은 데이터를 라인 한개씩 문자열로 반환함


시리얼라이즈

java에서는 오브젝트의 정보를 비트열로 만들어 파일에 기록하고, 다시 읽어서 원래의 오브젝트를 만들 수 있다. 이 때, 오브젝트를 비트열화하여 출력 스트림으로 기록하는 것을 시리얼라이즈, 입력 스트림으로 읽어 들여 원래의 오브젝트로 만드는 것을 디시리얼라이즈라고 한다. 시리얼라이즈를 하기 위해서는 클래스에서 Serializable 인터페이스를 구현해야 하는데 여기에는 메소드가 없기 때문에 오버라이딩할 필요는 없다.

import java.io.*;

class A implements Serializable { }

비트열화한 오브젝트 입출력을 위해서는 ObjectInputStream 클래스와 ObjectOutputStream 클래스를 사용한다.


이 내용은 ANK Co.,Ltd. 저 김성훈 역의 Java가 보이는 그림책에서 요약 발췌하였습니다.

+ Recent posts