* 본 내용은 학습하면서 정리하는 글입니다. 계속 업데이트됩니다.
2020/01/09 - 최초 작성
java.io 패키지의 주요 클래스
class description File 파일 시스템의 파일 정보를 얻기 위한 클래스 InputStream / OutputStream 바이트 단위 입출력을 위한 최상위 입출력 스트림 클래스 FileInputStream / FileOutputStream 바이트 단위 입출력을 위한 하위 스트림 클래스 DataInputStream / DataOutputStream ObjectInputStream / ObjectOutputStream PrintStream BufferedInputStream / BufferedOutputStream Reader / Writer 문자 단위 입출력을 위한 최상위 입출력 스트림 클래스 FileReader / FileWriter 문자 단위 입출력을 위한 하위 스트림 클래스 InputStreamReader / OutputStreamWriter PrintWriter BufferedReader / BufferedWriter
int read(byte[] buf) throws IOException
- 입력 스트림으로부터 매개값으로 주어진 바이트 배열의 길이만큼 바이트를 읽고 배열에 저장한다.
- 읽어들인 바이트 수를 리턴한다.
- 더 이상 읽을 수 없다면 -1을 리턴한다.
InputStream is = new FileInputStream("C:/test.jpg"); int readByteNo; byte[] readBytes = new byte[100]; while ((readByteNo = is.read(readBytes)) != -1) { ... }
int read(byte[] buf, int off, int len) throws IOException
- 입력 스트림으로부터 len개의 바이트만큼 읽고, 매개값으로 주어진 바이트 배열 buf[off]부터 len개까지 저장한다.
- 읽어들인 바이트 수를 리턴한다.
- 더 이상 읽을 수 없다면 -1을 리턴한다.
InputStream is = ...; byte[] readBytes = new byte[100]; int readByteNo = is.read(readBytes, 0, 100);
void write(byte[] buf) throws IOException
- 매개값으로 주어진 바이트 배열의 모든 바이트를 출력 스트림으로 보낸다.
OutputStream os = new FileOutputStream("C:/test.txt"); byte[] data = "ABC".getBytes(); os.write(data); // "ABC" 모두 출력
void write(byte[] buf, int off, int len) throws IOException
- buf[off]부터 len개의 바이트를 출력 스트림으로 보낸다
OutputStream os = new FileOutputStream("C:/test.txt"); byte[] data = "ABC".getBytes(); os.write(data, 1, 2); // "BC" 출력
int read() throws IOException
- 입력 스트림으로부터 한 개의 문자(2바이트)를 읽고 4바이트 int 타입으로 리턴한다.
- 리턴된 4바이트 중 끝에 있는 2바이트에 문자 데이터가 들어 있다.
- 더 이상 읽을 수 없다면 -1을 리턴한다.
char charData = (char) read();
Reader reader = new FileReader("C:/test.txt"); int readData; while ((readData = reader.read()) != -1) { char charData = (char) readData; }
int read(byte[] cbuf) throws IOException
- 입력 스트림으로부터 매개값으로 주어진 문자 배열의 길이만큼 문자 읽고 배열에 저장한다.
- 읽어들인 문자 수를 리턴한다.
- 더 이상 읽을 수 없다면 -1을 리턴한다.
Reader reader = new Reader("C:/test.txt"); int readCharNo; char[] cbuf = new char[2]; while ((readCharNo = reader.read(cbuf)) != -1) { ... }
abstract int read(byte[] cbuf, int off, int len) throws IOException
- 입력 스트림으로부터 len개의 문자만큼 읽고, 매개값으로 주어진 문자 배열 cbuf[off]부터 len개까지 저장한다.
- 읽어들인 문자 수를 리턴한다.
- 더 이상 읽을 수 없다면 -1을 리턴한다.
Reader reader = ...; byte[] cbuf = new cbuf[100]; int readCharNo = reader.read(cbuf, 0, 100);
void write(int c) throws IOException
- 매개 변수로 주어진 int 값에서 끝에 있는 2바이트(한 개의 문자)만 출력 스트림으로 보낸다.
- 매개 변수가 int 타입이므로 4바이트 모두를 보내는 것으로 오해할 수 있다.
Writer writer = new FileWriter("C:/test.txt"); char[] data = "홍길동".toCharArray(); for (int i = 0; i < data.length; ++i) { writer.write(data[i]); // "홍", "길", "동"을 하나씩 출력 }
void write(char[] cbuf) throws IOException
- 매개값으로 주어진 char[] 배열의 모든 문자 출력 스트림으로 보낸다.
Writer writer = new FileWriter("C:/test.txt"); char[] data = "홍길동".toCharArray(); writer.write(data); // "홍길동" 모두 출력
abstract void write(char[] cbuf, int off, int len) throws IOException
- cbuf[off]부터 len개의 문자를 출력 스트림으로 보낸다
Writer writer = new FileWriter("C:/test.txt"); char[] data = "홍길동".toCharArray(); writer.write(data); // "길동" 모두 출력
void write(String str) throws IOException
- 문자열 전체를 출력 스트림으로 보낸다.
void void write(String str, int off, int len) throws IOException
- 주어진 문자열 off순번부터 len개까지의 문자를 보낸다.
OutputStream - void flush() throws IOException
Writer - abstract void flush() throws IOException
출력 스트림은 내부에 버퍼(buffer)가 있어서 데이터가 출력되기 전에 버퍼에 쌓여있다가 순서대로 출력된다.
flush() 메소드는 버퍼에 잔류하고 있는 데이터를 모두 출력시키고 버퍼를 비우는 역할을 한다.
프로그램에서 더 이상 출력할 데이터가 없다면 flush() 메소드를 마지막으로 호출하여 버퍼에 잔류하는 모든 데이터가 출력되도록 해야한다.
OutputStream os = new FileOutputStream("C:/test.txt"); byte[] data = "ABC".getBytes(); os.write(data); os.flush(); os.close();
Writer writer = new FileWriter("C:/test.txt"); String data = "안녕 자바 프로그램"; writer.write(data); writer.flush(); writer.close();