FileReader, FileWriter, FileInputStream, FileOutputStream 클래스는 데이터를 읽고 쓰는 데 필요한 최소한의 기능만 갖춘 클래스입니다. 그렇기 때문에 여러 종류의 데이터를 다양한 방법으로 파일에 입출력하는 프로그램을 작성하려다 보면 이 클래스들의 기능만으로는 부족합니다. 하지만 다음 클래스들을 이용하면 보완할 수 있습니다.

 

이 클래스들은 java.io패키지에 속합니다.

 클래스 이름

설명

DataInputStream

프리미티브 타입의 데이터를 입출력하는 클래스

DataOutputStream

ObjectInputStream

프리미티브 타입과 레퍼런스 타입의 데이터를 입출력하는 클래스

ObjectOutputStream

BufferedReader

데이터를 한꺼번에 읽어서 버퍼에 저장해 두는 클래스

BufferedInputStream

BufferedWriter

데이터를 버퍼에 저장해 두었다가 한꺼번에 출력하는 클래스

BufferedOutputStream

LineNumberReader

텍스트 파일의 각 행에 번호를 붙여가면서 읽는 클래스

 

char타입, byte타입이 아닌 다른 프리미티브 타입 데이터를 파일에 읽고 쓸 때는 DataInputStream클래스와 DataOutputStream 클래스를 이용합니다.

 

DataOutputStream

 

메소드

설명 

void writeByte(int v)

파라미터로 주어진 int타입의 값의 마지막 1바이트만 출력하는 메소드

void writeShort(int v) 

파라미터로 주어진 int타입의 값의 마지막 2바이트만 출력하는 메소드

void writeChar(int v) 

파라미터로 주어진 int타입의 값의 마지막 2바이트만 출력하는 메소드

void writeInt(int v) 

파라미터로 주어진 int타입의 값을 출력하는 메소드 

void writeLong(long v) 

파라미터로 주어진 long타입의 값을 출력하는 메소드

void writeFloat(float v) 

파라미터로 주어진 float타입의 값을 출력하는 메소드

void writeDouble(double v) 

파라미터로 주어진 double타입의 값을 출력하는 메소드

void writeBoolean(boolean v) 

파라미터로 주어진 boolean타입의 값을 출력하는 메소드

 

 

DataInputStream

 

메소드

설명 

 byte readByte()

 1바이트를 읽어서 byte타입으로 리턴하는 메소드

 short readShort()

 2바이트를 읽어서 short타입으로 리턴하는 메소드

 char readChar()

 2바이트를 읽어서 char타입으로 리턴하는 메소드

 int readInt()

 4바이트를 읽어서 int타입으로 리턴하는 메소드

 long readLong()

 8바이트를 읽어서 long타입으로 리턴하는 메소드

 float readFloat()

 4바이트를 읽어서 float타입으로 리턴하는 메소드

 double readDouble()

 8바이트를 읽어서 double타입으로 리턴하는 메소드

 boolean readBoolean()

 1바이트를 읽어서 0이면 false, 아니면 true를 리턴하는 메소드 

 

 

DataOutputStream 클래스의 사용 예를 보여주는 프로그램 : DataOutputEx1.java

import java.io.*;
class DataInputEx {
	public static void main(String[] args) {
		DataInputStream in = null;
		try{
			in = new DataInputStream(new FileInputStream("output2.dat"));
			while(true){
				int data = in.readInt();
				//파일의 끝을 만나면 Exception이 발생
				//이 Exception은 IOException보다 먼저 catch해줘야한다.
				System.out.print(data);
			}
		}catch(FileNotFoundException fnfe){
			System.out.println("파일이 존재하지 않습니다.");
		}catch(EOFException eofe){
			//End of File Exception 발생
			System.out.println("파일 끝");
		}catch(IOException ioe){
			System.out.println("파일을 읽을 수 없습니다.");
		}finally{
			try{
				in.close();
			}catch(Exception e){}			
			
		}
	}
}

 

 

DataInputStream 클래스의 사용 예를 보여주는 프로그램 : DataInputEx1.java

import java.io.*;

class DataOutputEx {
	public static void main(String[] args) {
		DataOutputStream out = null;
		try{
			out=new DataOutputStream(new FileOutputStream("output2.dat"));
			/*out = new DataOutputStream(out1);
			out1 = new FileOutputStream("output2.dat");*/
			//DataOutputStream을 사용하는 이유는 char,byte 외 다른 프리미티브타입을 출력하는 프로그램을 작성하기 위해서이다.
			int arr[]={0,1,2,3,4,5,6,7,8,9};
			for(int cnt=0;cnt<arr.length;cnt++){
				out.writeInt(arr[cnt]);
			}
		}catch(IOException ioe){
			System.out.println("파일에 출력할 수 없습니다.");
		}finally{
			try{
				out.close();
				System.out.println("파일사이즈 : "+out.size());
			}catch(Exception e){
				
			}
		}
	}
}