ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.