- System class
package java.lang;
public class System {
public static PrintStream out; // 모니터 출력(표준)
public static InputStream in; // 키보드 입력(표준)
public static PrintStream err; // 모니터 출력(에러)
...
} - 바이트 단위로 파일을 read/write : FileInputStream, FileOutputStream 사용 (1바이트씩 복사)
- 문자 단위로 파일을 read/write : FileReader, FileWriter 사용 (글자 그대로 복사)
- 예 : test.txt 내용을 test_copy.txt에 복사
String fileName = "test.txt";
String fileCopyName = "test_copy.txt";
FileInputStream fis = new FileInputStream(fileName);
FileOutputStream fos = new FileOutputStream(fileCopyName, false); // overwrite
int data = 0;
while ( (date = fis.read() != -1 ) {
fos.write(data);
}
fis.close();
fos.close();
FileReader fr = new FileReader(fileName);
FileWriter fw = new FileWriter(fileCopyName, true); // append
while ( (data = fr.read() != -1 ) {
fw.write(data);
}
fr.close();
fw.close(); - 1차 스트림
데이터가 존재하는 목표지점에 스트림 직접 연결. 속도 느림
FileInputStream, FileOutputStream, FileReader, FileWriter - 2차 스트림
실제 데이터를 주고 받는 기능은 없고, 버터링을 이용해 1차 스트림의 기능 향상시키거나 추가
1차 스트림을 먼저 생성한 다음 이를 이용해 2차 스트림을 생성해야 함 - 1차 → 2차 스트림 변환
// 1차 스트림을 생성
FileInputStream fis = new FileInputStream("test,txt");
// 1차 스트림으로부터 2차 스트림을 생성한다.
BuferedInputStream bis = new BufferedInputStream(fis);
// 2차 스트림으로부터 데이터를 읽는다.
int data = bis.read();
// 2차 스트림을 닫는다. (1차 스트림도 같이 닫힘)
bis.close() 항목
1차 스트림
2차 스트림
바이트 스트림
FileInputStream
BufferedInputStream
FileOutputStream
BufferedOutputStream
문자 스트림
FileReader
BufferedReader
FileWriter
BufferedWriter
- 바이트 → 문자 스트림 변환
InputStream(OutputStream) 계열의 스트림을 문자 스트림으로 변환할 경우 InputStreamReader(OutputStreamWriter) 사용
(예제)
InputStreamReader isr = new InputStreamReader(System.in);
while ( (i = isr.read()) != '끝') { // 문자 스트림이므로 비교 가능
...
}