반응형
파일 쓰기
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
반응형
'Java > Java 이론' 카테고리의 다른 글
objectstream (0) | 2023.10.02 |
---|---|
printstream (0) | 2023.10.02 |
파일 복사 성능 테스트(일반복사 vs 버퍼 사용복사) (0) | 2023.10.02 |
보조스트림 (0) | 2023.09.27 |
입출력 Stream (0) | 2023.09.27 |