InputStream
자바 내장 클래스read()
InputStream의 객체, 1바이트의 입력만 받아들인다.(1글자)InputStream in = System.in;
int a;
a = in.read();
System.out.println(a);
// byte자료형이 아닌 int 자료형으로 저장
// int값은 아스키 코드값
// 콘솔에 a 입력시 97 출력
// 콘솔에 abc를 입력해도 1바이트만 읽기 때문에 97 출력
사용자가 전달한 데이터 = 입력 스트림(Stream)
스트림은 이어져 있는 데이터(byte)의 형태
스트림
A~B 까지는 수도관으로 연결되어 있다면, A에서 물 보내면 B에서 수도꼭지 열 때마다 물 나올 것이다.
스트림은 A -> B 로 이동하는
물의 흐름
이다.
// abc로 3바이트 모두 출력하려면?
InputStream in = System.in;
int a;
int b;
int c;
a = in.read();
b = in.read();
c = in.read();
System.out.println(a);
System.out.println(b);
System.out.println(c);
// abc를 치고 엔터 누르면 각각 아스키코드가 출력된다.
// 코드 개선
byte[] a = new byte[3];
in.read(a);
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
InputStream in = System.in;
InputStreamReader reader = new InputStreamReader(in);
char[] a = new char[3];
reader.read(a);
System.out.println(a);
InputStream in = System.in;
InputStreamReader reader = new InputStreamReader(in);
BufferedReader br = new BufferedReader(reader);
String a = br.readLine();
System.out.println(a);
InputStream - byte
InputStreamReader - character
BufferedReader - StringInputStream은 byte를 읽고, InputStreamReader는 문자를 읽고, BufferedReader는 문자열을 읽는다.
Scanner sc = new Scanner(System.in);
System.out.println(sc.next());
System.out -> 콘솔에 출력이나 디버깅시 사용
System.err -> 오류 메시지 출력할 경우 사용
System.out.println("일반 출력"); System.err.println("에러 출력");
> Task :Sample.main()
일반 출력
...
2 actionable tasks: 2 executed
에러 출력
FileOutputStream output = new FileOutputStream("c:/out.txt");
for (int i = 0; i < 11; i++) {
String data = i + "번째 줄입니다.\r\n";
output.write(data.getBytes());
}
output.close();
// C드라이브에 out.txt 생김
FileWriter fw = new FileWriter("c:/out.txt");
for(int i=1; i<11; i++) {
String data = i+" 번째 줄입니다.\r\n";
fw.write(data);
}
fw.close();
\r\n
을 문자열 뒤에 덧붙여야 하는 번거로움이 있다.\r\n
대신 println
메서드 사용PrintWriter pw = new PrintWriter("c:/out.txt");
for(int i=1; i<11; i++) {
String data = i+" 번째 줄입니다.";
pw.println(data);
}
pw.close();
원래 평소에 사용해왔던 System.out.println();
은 콘솔 출력 방법이다.
파일 출력 방법은 System.out
대신 PrintWriter의 객체를 사용한다.
true
추가FileWriter2 fw2 = new FileWriter2("c:/out.txt", true);
for(int i=11; i<21; i++) {
String data = i+" 번째 줄입니다.\r\n";
fw2.write(data);
}
fw2.close();
PrintWriter pw2 = new PrintWriter(new FileWriter("c:/out.txt", true));
for(int i=11; i<21; i++) {
String data = i+" 번째 줄입니다.";
pw2.println(data);
}
pw2.close();
new String (바이트배열)
byte[] b = new byte[1024];
FileInputStream input = new FileInputStream("c:/out.txt");
input.read(b);
System.out.println(new String(b)); // byte 배열을 문자열로 변경하여 출력
input.close();
BufferedReader br = new BufferedReader(new FileReader("c:/out.txt"));
while(true) {
String line = br.readLine();
if (line==null) break; // 더 이상 읽을 라인이 없을 경우 while 문을 빠져나간다.
System.out.println(line);
}
br.close();
파일을 쓰거나 읽은 후에는 반드시 close 메서드로 파일처리를 종료