스트림이라는 방식을 이용함
스트림의 사전적 의미 : 시냇물이라는 뜻을 가지고 있음. 즉, 데이터가 물 흐르는 것처럼 흐른다고 생각하면 됨
Java에서의 스트림 : 순서가 있는 일련의 연속된 데이터
스트림의 종류
1) 바이트 스트림 : 1바이트 단위로 데이터를 입출력(byte)
2) 문자 스트림 : 2바이트 단위로 데이터를 입출력(char)
Java 입출력 관련 클래스 : java.io 패키지에 존재함
==> 해당 패키지에 있는 클래스들을 이용하여 파일을 입출력 함
checked 방식의 예외 처리가 적용됨
Java의 입출력은 단방향성 ==> 한쪽으로만 입력하고 한쪽으로만 출력 됨
FIFO(First In First Out) ==> 먼저 입력되고 먼저 출력 됨
<예시1>
=============================코드=============================
package goott;
import java.io.IOException;
import java.io.InputStream;
public class FileIO_01 {
public static void main(String[] args) {
System.out.println("한 문자를 입력하세요");
// System.in : 표준입력장치(키보드)
InputStream is = System.in;
try {
int readByte = is.read();
System.out.println("읽어온 데이터(ASCII) >>> " + readByte);
System.out.println("읽어온 데이터(문자) >>> " + (char)readByte);
} catch (IOException e) {
e.printStackTrace();
}
}
}
=============================실행=============================


<예시2>
이번에는 C드라이브에서 생성한 Test 폴더의 test.txt파일 내의 내용을 바이트 스트림 방식으로 화면에 출력해보자

=============================코드=============================
import java.io.FileInputStream;
import java.io.InputStream;
public class FileIO_02 {
public static void main(String[] args) {
// 바이트 스트림 방식
InputStream is = null;
// FileInputStream은 InputStream의 자식 클래스임 (XxxInputStream이면 InputStream의 자식 클래스!)
try {
is = new FileInputStream("C:/test/test.txt");
while(true) {
int readByte = is.read();
if(readByte == -1) { // -1은 데이터가 더 없다는 뜻
break;
}
System.out.println("읽은 데이터 : " + (char)readByte + ", 남은 바이트 수 : " + is.available());
}
} catch (Exception e) { // 다중 catch를 쓰지 않고 싶다면 상위 catch(Exception e)로 처리하면 됨
e.printStackTrace();
}
}
}

<예시3>
windows에 있는 텍스트 파일의 system 바이트 값을 화면에 출력해보자
=============================코드=============================
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class FileIO_03 {
public static void main(String[] args) {
InputStream is = null;
int readByte;
try {
is = new FileInputStream("C:\\Windows\\system.ini");
while((readByte = is.read()) != -1) { // -1이 아니라면 반복해라!
System.out.print((char)readByte);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

<예시4>
=============================코드=============================
import java.io.IOException;
public class FileIO_04 {
public static void main(String[] args) {
System.out.println("한 줄을 입력하세요");
try {
while (true) { // enter 만 인식하게 한다!
int num = System.in.read(); // 표준입력장치로 받은 값을 읽어라
if (num == '\n') { // 현재 num은 아스키코드 값, '\n'은 엔터값이라고 보면 됨
break; // enter를 치면 break해라!
}
System.out.print((char) num);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
=============================실행=============================
