Input과 Output의 약자, 컴퓨터 내부 또는 외부 장치와 프로그램 간의 데이터를 주고받는 것
입출력을 위해서는 하드웨어 장치에 직접 접근이 필요한데 다양한 매체에 존재하는 데이터들을 사용하기 위해 입출력 데이터를 처리할 공통적인 방법으로 스트림을 이용한다.
입출력 장치에서 데이터를 읽고 쓰기 위해서 자바에서 제공하는 클래스이다. 하나의 스트림이 입출력을 동시해 수행할 수 없으므로 동시에 입출력을 하기 위해서는 2개의 스트림이 필요하다.
| 구분 | 입력 스트림 | 출력 스트림 |
|---|---|---|
| 최상위 클래스 | InputStream | OutputStream |
| 하위 클래스 | xxInputStream | xxInputStream |
| 구분 | 입력 스트림 | 출력 스트림 |
|---|---|---|
| 최상위 클래스 | Reader | Writer |
| 하위 클래스 | xxReader | xxWriter |
실제로 FileWriter와 FileReader를 이용해 txt 파일을 쓰고 읽을 수 있다.
// 프로젝트의 소스 폴더 안에 test.txt라는 빈 텍스트 파일을 생성한다.
public void output(){
FileWriter fr = null;
// FileWriter 객체 생성 시
// FileNotFoundException 예외가 발생 가능
// try ~ catch문을 이용해 작성한다
try{
fr = new FileWriter("test.txt")
// 미리 생성한 test.txt로 주소를 설정
String str = "으쌰으쌰";
// txt문서에 작성할 문장을 입력한다.
fr.write(str);
}
catch(IOException e){
e.printStackTrace();
}
finally{
try{
fr.close();
// 이 역시 예외 발생 가능하여 try ~ catch 문에 담아주어야 한다.
// 스트림을 닫아주어야 자원의 낭비를 막고
// 스트림 종료를 알려주어 txt파일에 정확하게 출력할 수 있다.
}catch(IOException e){
e.printStackTrace();
}
}
}
코드를 실행하면 test.txt문서에 입력한 문자열이 적힌다. 이를 불러와서 읽고 싶으면 read스트림을 작성한다.
public void input(){
FileReader fr = null;
//마찬가지로 예외처리를 위해 초기값은 null로 설정
try{
fr = new FileReader("test.txt");
//불러들일 경로 지정
while(true){
int data = fr.read();
// read() 메소드는 character단위로 읽어들여 int형으로 반환한다.
// 더 읽을 자료가 없으면 -1을 반환한다.
if(date == -1){
break;
//만약 더 읽을 문자가 없으면 반복문 종료
}
System.out.print((char)data);
}
}catch(IOException e){
e.printStackTrace();
}finally{
try{
fr.close();
}catch(IOException e){
e.printStackTrace();
}
}
}