Input과 Output의 약자, 컴퓨터 내부 또는 외부 장치와 프로그램 간의 데이터를 주고 받는 것
장치와 입출력을 위해서는 하드웨어 장치에 직접 접근이 필요한데 다양한 매체에 존재하는 데이터들을 사용하기 위해 입출력 데이터를 처리할 공통적인 방법으로 스트림 이용
input : 입력
-> 외부에서 내부로 값이 들어오는것
output : 출력
-> 내부에서 외부로 값이 나가는것
//파일 출력
FileOutputStream fos = null;
//FileOutputStream fos = new FileOutputStream("test.txt");
// Unhandled exception type FileNotFoundException
// => FileOutputStream 객체 생성 시
// FileNotFoundException 예외가 발생할 가능성이 있다 -> 예외처리
try {
fos = new FileOutputStream("test1.txt");
// 현재 프로그램에서
// test1.txt파일로 출력하는 통로 객체 생성
// 이 파일은 목적지가 필요
// -> 12_IO 지금 해당된 프로젝트 폴더가
// 기본 목적지로 설정되어있음
// 파일에 "hello" 내보내기
String str = "Hello";
for(int i =0; i < str.length(); i++) {
//System.out.println(str.charAt(i));
// "Hello"를 한 문자씩 끊어서 파일로 출력하기
fos.write( str.charAt(i) );
// Unhandled exception type IOException
// write() 는 IOException을 발생시킬 가능성이 있다
}
}catch(IOException e) {
// FileNotFoundException은 IOException의 자식
// 다형성 적용해서 IoException 하나로 둘 다 잡을수 있음
System.out.println("예외 발생");
e.printStackTrace(); //예외 추적
} finally {
// 예외가 발생 하던말던 무조건 수행
// 쓸데없는 통로 지우기
// --> 자원 반환
//사용한 스트림(통로 없앰)--> 필수작성
// 프로그램 메모리 관리 차원에서 항상 다쓰면 끊어줌
// -> 작성 안하면 문제점으로 꼽을 수 있음
try {
fos.close(); // 예외 발생하여 try catch 구문으로 한번 더 작성
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//파일입력
FileInputStream fis = null;
try {
fis = new FileInputStream("text1.txt");
// FileInputStream은 1바이트씩만 읽어올 수 있음
while(true) {
int data = fis.read(); // 다음 1바이트를 읽어오는데 정수형
// 다음 내용이 없으면 -1을 반환
if(data == -1) {// 다음 내용 없음 = >종료
break;
}
// 반복 종료가 안됐으면 char로 강제 형변환하여 문자로 변환
System.out.println((char)data );
}
}catch(IOException e) {
e.printStackTrace();
}finally {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}