파일 입출력
FileinputStream
파일로부터 바이트 단위로 읽어 들일 때 사용
FileReader
텍스트 파일로부터 데이터를 읽어 들일 때 사용
-문자 단위로 읽기 때문에, 텍스트가 아닌 그림, 오디오, 비디오 등의 파일은 읽을 수 없다.
FileWriter
텍스트 파일에 문자 데이터를 저장할 때 사용
-문자 단위로 읽기 때문에, 텍스트가 아닌 그림, 오디오, 비디오 등의 파일은 저장할수 없다.
package kr.co.kihd.filereaderfilewriter;
import java.io.File;
import java.io.FileWriter;
public class FileWriterTest {
public static void main(String[] args) throws Exception {
File file = new File("c:\\Temp1\\abc.txt");
//내용이 계속 덮어써진다.
//FileWriter fWriter = new FileWriter(file);
//내용이 계속 이어짐
//생성자에 true라는 매개변수가 붙어있기 때문에, 기존 파일에
//append가 된다.(내용이 이어진다)
FileWriter fWriter = new FileWriter(file, true);
fWriter.write("FileWriter클래스로 보낸내용입니다." + "\r\n");
fWriter.write("FileWriter클래스로 다시 보낸내용입니다." + "\r\n");
//기존내용을 덮어쓰는 것임.
System.out.println(file.getName() + "이 생성되었습니다.");
fWriter.flush();
fWriter.close();
}
}
보조 스트림
다른 스트림과 연결이 되어 여러가지 편리한 기능을 제공해주는 스트림
-문자 변환, 입출력 성능 향상, 기본 데이터 타입 입출력, 객체 입출력 준비 기능을 제공
문자 변환 보조 스트림
소스 스트림이 바이트 기반 스트림이지만 데이터가 문자일 경우 사용함.
읽어 들이는 쪽의 문자변환
InputStreamReader(InputStream을 Reader로 변환한다.)
보조스트림 2개 연결
package kr.co.kihd.inputstreamreaderoutputstreamwriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
public class InputStreamReaderTest {
public static void main(String[] args) throws Exception{
//주 입력스트림을 바이트 기반인 InputStream으로 설정함.
InputStream iStream = System.in; //콘솔로부터 입력을 받는다.
//문자를 받기 위해 보조스트림을 주 입력스트림에 연결한다.
Reader reader = new InputStreamReader(iStream);
int readCount;
char[] cArr = new char[100];
System.out.print("문자열을 입력하세요.");
/*
* 콘솔에서 입력을 받을 때는 -1을 리턴하는 경우는 Ctrl + Z를
* 누르면 됨. 콘솔창의 실행, 중지를 살펴야한다.
*/
while( (readCount = reader.read(cArr)) != -1) {
String str = new String(cArr, 0, readCount);
System.out.println("키보드로 부터 읽은 문자열 : " + str);
}
reader.close();
iStream.close();
}
}
문자데이터를 보조출력스트림으로 보내어 바이트 스트림 기반으로 변환되어 저장됨
package kr.co.kihd.inputstreamreaderoutputstreamwriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
public class OutputStreamWriterTest {
public static void main(String[] args) throws Exception {
//주스트림을 생성함
FileOutputStream fStream = new FileOutputStream("C:\\Temp1\\write.txt");
//보조스트림을 생성함
Writer writer = new OutputStreamWriter(fStream);
//저장할 데이터
String data = "문자데이터를 보조출력스트림으로 보내어" +
" 바이트 스트림 기반으로 변환되어 저장됨";
writer.write(data);
writer.flush();
writer.close();
fStream.close();
System.out.println("파일이 저장되었습니다.");
}
}
주 입력스트림인 FileInputStream에다가 속도 및 성능 향상 보조스트림인
BufferedInputStream을 연결한다.
실질적으로 file을 읽어오는 스트림은 바로 주스트림이고, 읽어온 데이터를
빨리 처리해주는 역할을 하는 바로 보조스트림인 BufferedInputStream이다.
package kr.co.kihd.bufferedinputstream;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
public class BufferedInputStreamTest {
public static void main(String[] args) throws Exception {
long start = 0;
long end = 0;
File file = new File("C:\\workspace\\chap26(IO입출력2)\\src\\kr\\co\\kihd\\bufferedinputstream\\We Never Go Alone.mp4");
//바이트 기반으로 속도의 차이를 보기 위한 프로그램을 작성해본다.
FileInputStream fStream = new FileInputStream(file);
System.out.println("file의 크기 : " + file.length());
System.out.println("바이트 기반 읽기 시작");
start = System.currentTimeMillis();
//그냥 읽기만 한다.
while(fStream.read() != -1) {}
System.out.println("바이트 기반 읽기 끝");
end = System.currentTimeMillis();
System.out.println("버퍼를 사용하지 않았을 때(바이트 기반)" +
(end-start) + "ms");
fStream.close();
System.out.println();
/*
* 주 입력스트림인 FileInputStream에다가 속도 및 성능 향상 보조스트림인
* BufferedInputStream을 연결한다.
* 실질적으로 file을 읽어오는 스트림은 바로 주스트림이고, 읽어온 데이터를
* 빨리 처리해주는 역할을 하는 바로 보조스트림인 BufferedInputStream이다.
*/
FileInputStream fStream2 = new FileInputStream(file);
BufferedInputStream bStream = new BufferedInputStream(fStream2);
System.out.println("버퍼 기반 읽기 시작");
start = System.currentTimeMillis();
while(bStream.read() != -1) {}
System.out.println("바이트 기반 읽기 끝");
end = System.currentTimeMillis();
System.out.println("버퍼를 사용했을 때(버퍼기반)"
+ (end - start) + "ms");
bStream.close();
fStream2.close();
}
}
file의 크기 : 4603709
바이트 기반 읽기 시작
바이트 기반 읽기 끝
버퍼를 사용하지 않았을 때(바이트 기반)7598ms
버퍼 기반 읽기 시작
바이트 기반 읽기 끝
버퍼를 사용했을 때(버퍼기반)17ms