쌍용 강북 교육센터 국비학원 Day 21일차
FileOutputStream
InputStream 를 상속받았으며, 키보드 혹은 지정된 경로로부터 바이트를 읽어, 바이트 단위로 출력할 수 있는 클래스이다. Node 스트림 (접속점)이 파일이며 1 byte 기반 출력 스트림이다.
만약에 입력받은 경로 혹은 지정한 경로에 파일이 없다라면 파일을 자동으로 생성해준다. (해당폴더는 존재 해야한다)
두번째 파라미터인 append 가 true 인 경우는 첫번째 파라미터인 해당파일경로에 (fileName 에는 이미 경로를 지정한 String 타입을 넣었다) 이미 내용물이 적혀 있는 경우일때 기존내용물은 그대로 두고 기존내용뒤에 새로운 내용을 덧붙여 추가하겠다는 말이다.
두번째 파라미터인 append 가 false 인 경우는 첫번째 파라미터인 해당파일에 이미 내용물이 적혀 있는 경우일때
기존내용물은 싹 지우고 새로운 내용을 새롭게 처음부터 쓰겠다는 말이다.
그런데 만약에 두번째 파라미터를 생략하면 자동적으로 false 로 인식한다. 즉, filename 의 기존내용물은 싹 지우고
새로운 내용을 새롭게 처음부터 쓰겠다는 말이다.

복사할 파일의 경로와 저장할 파일경로를 입력받아 파일을 복사하는 예제이다. 변수 input에 읽어온 파일을 int로 저장해 그 값을 FileOutputStream을 이용해 저장하려는 경로에 출력(복사) 해주는 예이다. 또한 배열을 선언해 반복을 적게 구현할수도 있고 파일크기를 지정해 제한할 수도있다.
File 클래스
File 객체를 생성하여 아래와 같이 여러가지 메소드를 사용할 수 있다.
또한, File 객체를 이용해 해당파일이 파일 및 폴더인지도 알 수 있고, 파일 및 폴더의 생성, 삭제도 가능하다. (단 폴더는 안의 내용이 비어있어야 한다)
FIle 의 대표적인 메소드 (대부분 변수에 경로를 선언한다)
exist () - 해당 파일 또는 폴더가 존재하는지 boolean으로 리턴해주는 메소드. 존재하면 true
mkdir () - 폴더를 생성하는 메소드
isDirectory () - 해당하는 것이 폴더인지 boolean으로 반환해주는 메소드
isFile () - 해당하는 것이 파일인지 booleand으로 반환해주는 메소드
createNewFile () - 파일을 생성해주는 메소드 (확장자명을 명시하는 것에 주의)
delete () - 해당 파일 또는 폴더를 삭제하는 메소드
BufferedInputStream 과 BufferedOutputStream
1 byte 기반 스트림이며 필터스트림이다. ( 다른말로 보조스트림 이라고 부른다.)
단독으로 사용할 수 없고, 반드시 노드스트림에 장착되어 사용되는 것이다.
마치 수영장에서 오리발처럼 보조기구로 사용한다. 이것을 사용하면 오리발처럼 속도가 향상되므로 많이 사용한다.
읽어올 데이터를 매번 1 byte 마다 읽고,쓰고 한다라면 입,출력에 너무 많은 시간이 소요된다. 그래서 쓰는 작업없이 메모리 버퍼에 데이터를 한꺼번에 읽기만 하여 모아두면 그만큼 쓰는 작업이 없으므로 읽기 속도는 빨라질 것이다.
그리고 나서 메모리 버퍼에 읽어서 모아두었던 내용을 한방에 쓰기를 하면 매번 1byte 씩 쓰는 것보다 속도가 빨라진다.
BufferedInputStream 와 BufferedOutputStream 의 기본 버퍼크기는 512 byte 이다.
[예제]
필터스트림(보조스트림)을 이용해서 키보드로 부터 입력받고, 입력받은 그 내용을 모니터(콘솔화면)에 출력하고, 또한 동시에 파일에도 출력해본다.
데이터소스 : 키보드 (System.in --> 노드스트림) + 필터스트림(보조스트림)으로 BufferedInputStream 을 사용함.
데이터목적지 : 모니터 (System.out --> 노드스트림) + 필터스트림(보조스트림)으로 BufferedOutputStream 을 사용함.
파일 (FileOutputStream --> 노드스트림) + 필터스트림(보조스트림)으로 BufferedOutputStream 을 사용함
'Java' 카테고리의 다른 글
쌍용강북교육센터 국비 학원 Day 35일차 JDBC (0) | 2023.02.22 |
---|---|
쌍용강북교육센터 국비 학원 Day 22일차 Java (입출력 스트림 Input, OutputStream, FileReader, Writer) (0) | 2023.02.02 |
쌍용강북교육센터 국비 학원 Day 20일차 Java (IO - InputStream, OutputStream, FileInputStream) (0) | 2023.01.31 |
쌍용강북교육센터 국비 학원 Day 19일차 Java (Properties, 와일드카드<?>, Enum) (0) | 2023.01.30 |
Scanner 와 BufferedReader / BufferedWriter 차이점 그리고 StringBuilder에 대해서 (2) | 2023.01.30 |