Java
try {
예외발생이 예상되는 수행문1;
예외발생이 예상되는 수행문2;
수행문3;
} catch (예외클래스 e) {
수행문4;
} catch (예외클래스 e) {
수행문5;
} finally {
수행문6; // 애플리케이션이 점유했던 자원을 해제하는 수행문
}
package day3;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class ExceptionApp1 {
public static void main(String[] args) {
FileWriter writer = null;
try {
writer = new FileWriter("src/day3/sample1.txt"); // 컴퓨터의 입출력 자원 점유
writer.write("finally 블록 연습\n"); // 컴퓨터의 입출력 자원 사용 - 파일에 기록
writer.write("finally 블록 연습\n"); // 컴퓨터의 입출력 자원 사용 - 파일에 기록
writer.write("finally 블록 연습\n"); // 컴퓨터의 입출력 자원 사용 - 파일에 기록
writer.write("finally 블록 연습\n"); // 컴퓨터의 입출력 자원 사용 - 파일에 기록
writer.write("finally 블록 연습\n"); // 컴퓨터의 입출력 자원 사용 - 파일에 기록
writer.write("finally 블록 연습\n"); // 컴퓨터의 입출력 자원 사용 - 파일에 기록
writer.write("finally 블록 연습\n"); // 컴퓨터의 입출력 자원 사용 - 파일에 기록
// 아래의 코드는 try블록내의 모든 수행문이 오류없이 실행ㄷ왼 후에 실행되는 수행문이다.
// try블록내의 수행문 실행 중 오류가 발생하면 실행되지 않는 수행문이다.
// * 점유했던 자원을 해제시키는 수행문의 위치로 적절하지 않음.
// writer.close(); // 프로그램이 점유했던 컴퓨터의 자원을 해제하는 수행문
} catch (IOException e) {
e.printStackTrace();
// 아래의 코드는 try블록내의 수행문에서 오류가 발생할 떄만 실행되는 수행문이다
// * 점유했던 자원을 해제시키는 수행문의 위치로 적절하지 않음.
// writer.close(); // 프로그램이 점유했던 컴퓨터의 자원을 해제하는 수행문
} finally {
// FileWriter객체 생성 후 점유했던 컴퓨터의 자원을 해제하는 수행문
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
// 수행할 작업 없음
}
}
}
}
package day3;
import java.io.FileWriter;
import java.io.IOException;
public class ExceptionApp2 {
public static void main(String[] args) {
// 프로그램이 점유했떤 컴퓨터의 자원으로 자동으로 해제하기
/*
try (자원을 점유하는 객체를 생성하는 수행문) {
점유한 자원을 사용하는 수행문;
점유한 자원을 사용하는 수행문;
점유한 자원을 사용하는 수행문;
} catch(예외 e) {
예외 발생시 실행할 수행문;
}
위와 같이 작성한 프로그램은 객체가 사용했던 컴퓨터 자원을 안전하게 해제시켜준다.
AutoCloseable 인터페이스를 구현한 하위 클래스만 자동 자원해제가 지원된다.
자바 7 버전부터 지원된다.
*/
try (FileWriter writer = new FileWriter("src/day3/sample2.txt")) {
writer.write("자동 자원해제");
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 1 byte 읽기
InputStream in = new FileInputStream("c:/files/sample.dat");
// oneByteData에는 read() 메소드가 스트림으로부터 읽어온 데이터가 저장된다.
int oneByteData = in.read();
// 스트림의 끝까지 읽기
InputStream in = new FileInputStream(new File("c:/files", "sample.dat"));
int oneByteData = 0;
// int read() : 1byte씩 읽어서 반환한다. 스트림의 끝에 도달하면 -1을 반환한다.
while ((oneByteData = in.read()) != -1) {
// oneByteData에는 한 바이트식 읽어온 데이터가 들어있다
// 읽어온 데이터 처리하기
}
// 스트림의 끝까지 읽기
InputStream in = new FileInputStream(new File("c:/files/sample.dat"));
// bytes 배열은 read(Byte[] buf) 메소드가 스트림으로부터 한 번에 읽어올 byte데이터를 저장하기 위한 배열이다.
byte[] bytes = new byte[1024];
// len은 read(byte[] buf) 메소드가 스트림으로부터 한번에 읽어서 byate배열에 저장한 데이터의 갯수가 저장된다.
// byte배열의 크기가 1024라면 len의 값은 0 ~ 1014 범위의 값이다.
int len = 0;
while ((len = in.read(bytes)) != -1) {
// bytes배열의 데이터 처리하기
}
// BufferedInputStream은 다른 InputStream과 연결해서 사용한다.
BufferedInputStream in = new BufferedInputStream(new FileInputStream("c:/files/sample.dat"));
// 스트림의 끝가지 읽기
int data = 0;
while ((data = in.read()) != -1) {
// data의 값 처리하기
}
// DataInputStream은 다른 InputStream과 연결해서 사용한다.
Socket socket = new Socket("192.168.10.11", 300);
DataInputStream in = new DataInputStream(socket.getInputStream());
// DataInputStream의 xxxRead() 메소드로 값 읽어오기
boolean value1 = in.readBoolean();
int value2 = in.readInt();
long value3 = in.readLong();
double value4 = in.readDouble();
String value5 = in.readUTF();
...
// 1 바이트씩 읽어서 1바이트씩 출력하기
FileInputStream in = new FileInputStream("c:/files/sample.dat");
FileOutputStream out = new FileOutputStream("c:/files/sample.dat.backup");
int value = 0;
while ((value = in.read()) != -1) {
out.write(value);
}
// bytes배열로 읽어서 출력하기
FileInputStream in = new FileInputStream("c:/files/sample.dat");
FileOutputStream out = new FileOutputStream("c:/files/sample.dat.backup");
byte[] bytes = new byte[1024];
int len = 0;
while ((len = in.read(bytes)) != -1) {
out.write(bytes, 0, len);
}
DataOutputStream out = new DataOutputStream(new FileOutputStream("c:/files/data.sav"));
out.writeBoolean(true);
out.writeInt(10);
out.writeLong(10000L);
out.writeDouble(3.14);
out.writeUTF("")
// 직렬화할 객체를 생성하고, 초기화한다.
Person person = new Person(10, "hong", "홍길동", "010-1234-1234");
Socket socket = new Socket("192.168.10.20", 3000);
// ObjectOutputStream은 객체를 연결된 출력스트림으로 출력할 수 있다.
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
// Person객체를 ObjectOutputStream의 writeObject(Object obj)로 출력한다.
out.writeObject(person);
// 화면에 출력하기
// PrintStream은 출력전용 스트림이다.
PrintStream out = new PrintStream(Sytem.out);
out.println(true);
out.println(10);
out.println(1000L);
out.println(3.14);
out.println("실습");
// 텍스트 한 줄 읽기
BufferedReader reader = new BufferedReader(new FileReader("c:/files/sample.txt"));
String line = reader.readLine();
// 텍스트 읽기
Bufferedreader reader = new Bufferedreader(new FileReader("c:/files/sample.txt"));
String line = null;
while ((line = reader.readLine()) != null) {
// 읽어온 텍스트를 처리하기
}
// 키보드로 입력한 내용을 한 줄 읽어오기
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// InputStream을 다른 Reader와 연결하기
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("c:/files/sample.txt")))
// InputStream을 다른 reader와 연결하기
Socket socket = new Socket("192.168.10.100", 3000);
BufferedReader reader = new BufferedReader(new InputStreamReader(soket.getInputStream()));