Java/Java 이론

보조스트림 : 기본 자료형으로 입출력하기

2주녘 2023. 10. 2. 10:24
반응형

파일 쓰기

public class DataInputApplication {
    public static void main(String[] args) throws Exception {   // 예외처리
        // TODO : 파일 쓰기용으로 파일 생성
        FileOutputStream fileOutputStream
                = new FileOutputStream("src/main/resources/primitive.txt");

        // TODO : 보조스트림 : 기본 자료형 사용하게 만들어주는 스트림
        //      사용법 : new DataOutputStream(기본스트림);
        DataOutputStream dataOutputStream
                = new DataOutputStream(fileOutputStream);

        // 파일에 기본 자료형 쓰기 함수들
        // TODO : writeUTF("문자열") -> 파일에 문자열 쓰기
        //        writeDouble(실수) -> 파일에 실수 쓰기
        //        writeInt(정수) -> 파일에 정수 쓰기
        dataOutputStream.writeUTF("홍길동");
        dataOutputStream.writeDouble(95.4);
        dataOutputStream.writeInt(1);

//        TODO: 여기서 부터 코딩
        dataOutputStream.writeUTF("감자바");
        dataOutputStream.writeDouble(90.3);
        dataOutputStream.writeInt(2);
        
        // TODO : 파일 닫기
        dataOutputStream.flush();   // 기본버퍼의 내용을 진짜파일에 쓰기
        dataOutputStream.close();

    }
}

우선 FileOutputStream을 사용하여 파일을 생성합니다.

// TODO : 파일 쓰기용으로 파일 생성
FileOutputStream fileOutputStream
        = new FileOutputStream("src/main/resources/primitive.txt");

 

보조 스트림을 사용합니다.

// TODO : 보조스트림 : 기본 자료형 사용하게 만들어주는 스트림
//      사용법 : new DataOutputStream(기본스트림);
DataOutputStream dataOutputStream
        = new DataOutputStream(fileOutputStream);

dataOutputStream에는 여러 함수들이 존재합니다.

// TODO : writeUTF("문자열") -> 파일에 문자열 쓰기
//        writeDouble(실수) -> 파일에 실수 쓰기
//        writeInt(정수) -> 파일에 정수 쓰기
dataOutputStream.writeUTF("홍길동");
dataOutputStream.writeDouble(95.4);
dataOutputStream.writeInt(1);
dataOutputStream.writeUTF("감자바");
dataOutputStream.writeDouble(90.3);
dataOutputStream.writeInt(2);

마무리로 .flush()와 .close()를 실행합니다.

// TODO : 파일 닫기
dataOutputStream.flush();   // 기본버퍼의 내용을 진짜파일에 쓰기
dataOutputStream.close();

 

파일 읽기

생성한 파일을 읽기 위해 접근 생성자를 생성합니다.

FileInputStream fileInputStream
        = new FileInputStream("src/main/resources/primitive.txt");

 

보조스트림을 적용하여 기본자료형 기능을 추가해줍니다.

DataInputStream dataInputStream
        = new DataInputStream(fileInputStream);

 

반복문을 실행하여 화면에 출력합니다.

이때 반복문은 2번 실행합니다. 그 이유는 위에 요소를 2개 추가하였기 때문입니다.

        dataOutputStream.writeUTF("홍길동");
        dataOutputStream.writeDouble(95.4);
        dataOutputStream.writeInt(1);


        dataOutputStream.writeUTF("감자바");
        dataOutputStream.writeDouble(90.3);
        dataOutputStream.writeInt(2);

반복문을 작성할 때 주의점은 요소들의 바이트 크기가 각기 다르기 때문에 출력순서에 맞게 자료형을 읽어야 합니다.

        // TODO : 반복문 실행 후 화면에 출력 : 두번 실행
        //     주의점 : 바이트 크기가 각각 다르므로 출력순서에 맞게 자료형을 읽어야 함
        for (int i = 0; i < 2; i++) {
//            dataOutputStream.writeUTF("감자바"); //
//            dataOutputStream.writeDouble(90.3); // 8byte
//            dataOutputStream.writeInt(2);       // 4byte
            String name = dataInputStream.readUTF();        // 파일에서 읽기
            double score = dataInputStream.readDouble();        // 파일에서 읽기
            int order = dataInputStream.readInt();        // 파일에서 읽기
            System.out.println(name + ", " + score + ", " + order);

        }

마무리로 파일을 닫아줍니다.

// TODO : 파일 닫기
dataInputStream.close();
fileInputStream.close();

실행결과

홍길동, 95.4, 1
감자바, 90.3, 2

반응형