[JAVA] 정리/파일(file)

파일(file) - 7. 텍스트 입출력_파일 쓰기 OutputStream(덮어쓰기, 이어쓰기)

쎈코 2023. 2. 27. 23:39

파일 쓰기(출력)
- 쓰기 작업을 지원해주는 스트림(Stream) 객체 > 덮어쓰기 모드

파일 쓰기 모드
1. 덮어쓰기 모드(기본)
- 기존 내용을 삭제하고 다시 파일을 생성 후 데이터를 작성한다.
- 파일이 있으면 파일을 다시 생성
- 파일이 없으면 파일을 새로 생성

2. 이어쓰기 모드
- 기존 내용을 유지하고, 이어서 데이터를 추가한다.
- 파일이 있으면 파일을 그대로 사용 후 추가
- 파일이 없으면 파일을 새로 생성


1. 덮어쓰기 모드

try {
     //데이터를 저장할 파일을 참조
     File file = new File("C:\\class\\code\\java\\file\\data.txt");           //경로 지정
     //저장할 파일의 스트림 객체를 생성
     - 빨대 꽂기
     - 스트림 열기
     FileOutputStream stream = new FileOutputStream(file);  //file이 불안정(없을수도 있으니까) -> 예외처리(try-catch) 필요
     //File을 출력할 수 있는 Output Stream

     쓰기 > 문자 코드값(빨대 꽂아서 stream을 연 것)
     stream.write(65);      //65 : A
     stream.write(66);      //66 : B
     stream.write(67);      //67 : C
     > 다른 문자코드값을 65, 66, 67대신 입력하면 추가가 아니라 덮어쓰기가 됨

     - 빨대 뽑기
     - 스트림 닫기(열었던 stream은 반드시 닫아야 함)
     stream.close();

     System.out.println("완료");
     //윈도우 탐색기를 열어서 data에 가보면 data.txt 파일이 생성되어 있고, 열면 ABC가 적혀있음

} catch(Exception e) {
     e.printStackTrace();
}


2-1. 이어쓰기 모드

try {
     //데이터를 저장할 파일을 참조
     File file = new File("C:\\class\\code\\java\\file\\data2.txt");

     저장할 파일의 스트림 객체를 생성
     - 빨대 꽂기
     - 스트림 열기
     FileOutputStream stream = new FileOutputStream(file, true);         //false면 덮어쓰기, true면 이어쓰기 모드

     쓰기 > 문자 코드값(빨대 꽂아서 stream을 연 것)
     stream.write(65);      //65 : A
     stream.write(66);      //66 : B
     stream.write(67);      //67 : C


     stream.write(68);      //68 : D
     stream.write(69);      //69 : E
     stream.write(70);      //70 : F
     > 기존값 입력 후 지우고 그 자리에 다른 값을 입력해도 기존값+추가값(이어쓰기)가 됨

     - 빨대 뽑기
     - 스트림 닫기(열었던 stream은 반드시 빼야 함)
     stream.close();

     System.out.println("완료");
     //윈도우 탐색기를 열어서 data에 가보면 data.txt 파일이 생성되어 있고, 열면 ABCDEF가 적혀있음

} catch(Exception e) {
     e.printStackTrace();
}


2-2. 이어쓰기 모드

try {
     //데이터를 저장할 파일을 참조
     File file = new File("C:\\class\\code\\java\\file\\data2.txt");

     저장할 파일의 스트림 객체를 생성
     - 빨대 꽂기
     - 스트림 열기
     FileOutputStream stream = new FileOutputStream(file, true); 

     쓰기 > 문자 코드값(빨대 꽂아서 stream을 연 것)
     stream.write('\r');
     stream.write('\n');

     stream.write('j');
     stream.write('a');
     stream.write('v');
     stream.write('a');

     String txt = "Hello Java!!";                 //문자열에서 글자 추출 가능
     for(int i=0; i<txt.length(); i++) {
         char c = txt.charAt(i);
         stream.write(c);                             //메모장에 문자열에서 뽑은 글자들 입력
     }

     byte[] list = {'A', 'B', 'C' };                    //배열에서도 추출 가능
     stream.write(list);                               //배열값들 메모장에 입력

     String txt = "Java Programming";
     stream.write(txt.getBytes());              //문자열 txt에 있는 글자들을 바이트 단위로 출

     바이트 단위 쓰기(1byte씩 저장: 한글 저장을 못함. 한 글자(2byte)를 반씩 쪼개서 적음 -> 오류)
     stream.write('가');        //오류남
     stream.write('나');
     stream.write('다');

     - 빨대 뽑기
     - 스트림 닫기(열었던 stream은 반드시 빼야 함)
     stream.close();

     System.out.println("완료");
     //윈도우 탐색기를 열어서 data에 가보면 data.txt 파일이 생성되어 있고,

       열면 java, Hello Java!!, ABC, Java Programming, 가 적혀있음

} catch(Exception e) {
     e.printStackTrace();
}