-
day34 - JAVA (자바, IO스트림)KIC/JAVA 2021. 7. 30. 12:06반응형
[FileOutputStream 예제]
package javaPro.java_io; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; import java.util.Date; public class FileOutputStreamEx2 { public static void main(String[] args) { firstMethod(); } private static void firstMethod() { secondMethod(); } private static void secondMethod() { try { throw new Exception("파일에 예외 메시지 저장"); } catch (Exception e) { e.printStackTrace(); try { /* * ("error.log",true) "error.log" : 생성할 파일의 이름. 파일 없으면 생성. 파일이 있으면 내용 변경 * true/false : true : 파일이 있는 경우 기존의 내용에 새로운 내용을 추가 false :파일이 있는 경우 기존의 내용을 새로운 * 내용으로 변경 */ FileOutputStream fos = new FileOutputStream("error.log", true); fos.write(("1: " + e.getMessage()).getBytes()); // error.log 파일에 e.printStackTrace() 내용을 출력 fos.write(("1:" + e.getMessage() + "\n\n").getBytes()); fos.write(("2.====================\n\n" + (new Date()) + "\n\n").getBytes()); e.printStackTrace(new PrintStream(fos)); fos.write("3.====================\n\n".getBytes()); } catch (IOException e1) { e1.printStackTrace(); } } } }
[PrintStream 예제]
package javaPro.java_io; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; public class PrintStreamEx1 { public static void main(String[] args) throws IOException { FileOutputStream fos = new FileOutputStream("Print.txt"); PrintStream ps = new PrintStream(fos, true); // true : autoflush 기능 추가 ps.println("홍길동"); ps.println(1234); ps.println(true); ps.println(65); ps.println(65); ps.flush(); ps = new PrintStream("print2.txt"); ps.println("홍길동"); ps.println(1234); ps.println(true); ps.println(65); ps.println(65); ps.flush(); } }
[Object의 output, input 예제]
[output]
package javaPro.java_io; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.io.Serializable; /* * ObjectOutputStream 예제 * - 객체를 외부로 전송하는 스트림. * - 전송되는 객체는 반드시 Serializable 인터페이스를 구현해야 한다. * java.io.NotSerializableException : 직렬화 대상 객체가 아님 * - 객체를 외부로 전송하는 기능을 직렬화라 한다. * - ObjectInputStream 을 이용하여 객체를 받을 수 있다. */ class Customer implements Serializable { // 외부에 객체를 전송/저장 할 때는 Serializable해줘야 한다. private String name; // transient : age 변수값은 직렬화 대상에서 제외시킨다. private transient int age; // private int age; public Customer(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "[" + " name=" + name + ", age=" + age + "]"; } } public class ObjectOutputStreamEx1 { public static void main(String[] args) throws IOException { // 지금 이 throws IOException은 try 구문 가독성 떨어져 귀찮을때 사용 FileOutputStream fos = new FileOutputStream("Object.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos); Customer c1 = new Customer("홍길동", 20); Customer c2 = new Customer("김삿갓", 30); oos.writeObject(c1); // c1 객체를 외부로 출력 oos.writeObject(c2); System.out.println("고객1 : " + c1); System.out.println("고객2 : " + c2); } }
[input]
package javaPro.java_io; import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; public class ObjectInputStreamEx1 { // ObjectOutputStreamEx1 을 읽으려면 동일한 패키지 내에 있어야 한다. // Customer가 default로 선언 되어 있기 때문 public static void main(String[] args) throws ClassNotFoundException, IOException { ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.ser")); Customer c1 = (Customer) ois.readObject(); Customer c2 = (Customer) ois.readObject(); System.out.println("고객1" + c1); System.out.println("고객2" + c2); // age를 ObjectOutputStreamEx1에서 transient해놨다면 값이 저장되지 않는다. // transient을 해제하면 age도 값이 저장된다. } }
[결과 화면]
-> transient을 사용했다면 age에 값이 저장이 안된다.
300x250'KIC > JAVA' 카테고리의 다른 글
day35 - JAVA (네트워크) (0) 2021.08.03 day33_2 - JAVA (자바, IO스트림) (0) 2021.07.29 day33_1 - JAVA (자바, 멀티 스레드) (0) 2021.07.29 day32 - JAVA (자바, 스트림 예제, 멀티 스레드) (0) 2021.07.28 day31 - JAVA (자바, 스트림, 플랫맵, 필터) (0) 2021.07.27