출력 스트림
※ System.out은 OutputStream 클래스의 객체가 아니고, OutputStream 클래스의 서브클래스인 PrintStream 클래스의 객체이다.
다음은 OutputStreamWriter 클래스를 사용하여 문자열을 출력하는 예제이다.
package ch02;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class OutputStreamWriterTest {
public static void main(String[] args) {
OutputStreamWriter out = new OutputStreamWriter(System.out);
try {
out.write("배우고 싶지 않은 자바!");
out.flush();
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
다음은 FileWriter 클래스와 앞에서 배운 FileReader 클래스를 사용해서 파일을 복사하는 예제이다.
package ch02;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileCopyTest {
public static void main(String[] args) {
try {
FileReader in = new FileReader("MYDATA-1.txt");
FileWriter out = new FileWriter("MYDATA-2.txt");
int ch;
while((ch = in.read()) != -1) {
out.write(ch);
}
in.close();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
※ BufferedWriter 클래스를 생성할 때 OutputStreamWriter 클래스의 객체를 인수로 주면, 버퍼를 사용하면서 캐릭터 단위로 출력하는 스트림이 생성된다.
다음은 BufferedWriter 클래스를 사용하여 화면에 문자열을 출력하는 예제이다.
package ch02;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class BufferedWriterTest {
public static void main(String[] args) {
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
try {
out.write("재미없는 자바!");
out.flush();
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
다음은 DataOutputStream 클래스를 사용해서 파일에 데이터를 쓰고, DataInputStream 클래스를 사용해서 저장된 데이터를 다시 읽는 예제이다.
package ch02;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class DataInputOutputTest {
public static void main(String[] args) {
char myChar = 'T';
byte myByte = 44;
boolean myBoolean = true;
try {
DataOutputStream out = new DataOutputStream(new FileOutputStream("MYDATA"));
out.writeChar(myChar);
out.writeByte(myByte);
out.writeBoolean(myBoolean);
out.flush();
out.close();
DataInputStream in = new DataInputStream(new FileInputStream("MYDATA"));
myChar = in.readChar();
myByte = in.readByte();
myBoolean = in.readBoolean();
System.out.println("myChar : " + myChar);
System.out.println("myByte : " + myByte);
System.out.println("myBoolean : " + myBoolean);
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
※ PrintStream 클래스는 필터 스트림으로 OutputStream 클래스의 객체를 인수로 받아서 생성할 수 있다.
※ PrintStream 클래스가 OutputStream 클래스의 복잡한 메소드들을 print() 메소드와 pritnln() 메소드만으로 사용할 수 있도록 정리한 필터 스트림인 것처럼, PrintWriter 클래스는 OutputStreamWriter 클래스의 메소드들을 print() 메소드와 println() 메소드만으로 사용할 수 있게 정리한 필터 스트림이다.
다음은 앞에서 작성했던 OutputStreamWriterTest.java 에제를 PrintWriter 클래스를 사용하도록 고친 것이다. write() 메소드 대신 print() 메소드를 사용한 것을 알 수 있다.
package ch02;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
public class PrintWriterTest {
public static void main(String[] args) {
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
out.print("노잼스 자바!");
out.flush();
}
}