클래스를 파일로 저장하고 그 파일을 읽어들이는 프로그램을 작성
소스 보기 >>
더보기
Main
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Ex003_ObjectStream {
public static void main(String[] args) {
User ov = new User();
ov.saveFile();
ov.loadFile();
}
}
Class
// Serializable : 직렬화
// 직렬화에서 제외되는 것 : 메소드, static 변수, transient 변수
class UserVO implements Serializable { // 바이트로 고쳐서 저장해줌
private static final long serialVersionUID = 1L; // 같은 클래스인지아닌지 확인용도
private String name;
private String tel;
private int age;
public UserVO() {
}
public UserVO(String name, String tel, int age) {
this.name = name;
this.tel = tel;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
class User {
private String pathname = "object.txt";
public void loadFile() {
try( ObjectInputStream ois = new ObjectInputStream(new FileInputStream(pathname))) {
System.out.println("파일 내용...");
while(true) {
UserVO vo = (UserVO) ois.readObject(); // 역직렬화수행
System.out.println(vo.getName()+"\t"+vo.getTel()+"\t"+vo.getAge());
}
} catch (EOFException e) {
// ObjectInputStream 스트림은 파일의 내용을 더 이상 읽을 수 없으면
// EOFException 예외가 발생한다. 따라서 EOFException 예외를 catch하고
// 아무런 코드도 작성하지 않는다. // 안잡으면 터짐
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public void saveFile() {
// ObjectOutputStream : Serializable 인터페이스가 구현되어 있어야 저장가능하다.
try ( ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(pathname))){
UserVO vo = new UserVO("거자바", "010-1010-0000", 19);
oos.writeObject(vo); // 주소 저장함. 직렬화해서 저장
oos.writeObject(new UserVO("다자바", "010-0000-0000", 20));
oos.writeObject(new UserVO("너자바", "010-1111-0000", 20));
oos.writeObject(new UserVO("구자바", "010-2222-0000", 20));
System.out.println("파일 저장 완료...");
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
클래스 UserVO를 Object 바이트 스트림으로 보내고 다시 Object 바이트 스트림으로 받았기 때문에. loadFile() 할때는 (UserVO)로 형변환을 해주어야 한다.
'쌍용강북교육센터 > 8월' 카테고리의 다른 글
0826_Java : JDBC (Java Database Connectivity) (0) | 2021.08.26 |
---|---|
0825_Java : Serializable 직렬화 (0) | 2021.08.26 |
0825_Java : ObjectOutputStream, ObjectInputStream 클래스 (0) | 2021.08.25 |
0825_Java : DataStream 활용 예제 (0) | 2021.08.25 |
0825_Java : DataInputStream, DataOutputStream 클래스 (0) | 2021.08.25 |