올해는 머신러닝이다.
[펌]자바 IO 대충 정리..(필요할때 쓰자) 본문
출처 : http://cafe.naver.com/ccjmaster.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=133
=========================================================================================
자바에서 처리하는 입력과 출력은 스트림(Stream)에 의존하다.
다시 말해 모든 형태의 입력과 출력은 1byte의 흐름으로 이루어져 있다는 이야기이다.
그런데 이러한 작업 처리를 텍스트 기반으로 한 형태로 바꿔 준다든지, 객체 기반으로 한 형태로 바꾸어 준다든지 하는 클래스가 있다.
우리는 먼저 1byte의 기본 입력과 출력 클래스 몇 가지를 공부하고 다음으로 각 형태로 변경시키는 클래스를 살펴보도록 할 것이다.
우선 1byte의 입력과 출력 기본 클래스는 InputStream과 OutputStream이다. 각 클래스의 상속관계는 다음과 같다.
OutputStream
▶ FileOutputStream
▶ ByteArrayOutputStream
▶ PipedOutputStream
▶ ObjectOutputStream
▶ FilterOutputStream - BufferedOutputStream
▶ PaintStream
▶ DataOutputStream
InputStream
▶ FileInputStream
▶ ByteArrayInputStream
▶ PipedInputStream
▶ ObjectInputStream
▶ SequenceInputStream
▶ AudioInputStream
▶ StringBufferInputStream
▶ FilterInputStream - BufferedInputStream
▶ LineNumberInputStream
▶ PushbackInputStream
▶ DataInputStream
여기에 표시된 많은 클래스를 다 공부한다는 것은 우리가 배우고자 하는 범위를 벗어나는 것이므로
실제로 파일 입·출력에서 많이 쓰는 형식을 한 가지씩만 외우도록 하자.
1byte 출력
(1) 콘솔 출력용
FileOutputStream fos = new FileOutputStream(FileDescriptor.out);
BufferedOutputStream bos = new BufferedOutputStream(fos);
DataOutputStream dos = new DataOutputStream(bos);
dos.write…
(2) 파일 출력용
File file = new File("파일명");
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
DataOutputStream dos = new DataOutputStream(bos);
dos.write…
(3) 네트워크 출력용
Socket soc = new Socket(…);
BufferedOutputStream bos = new BufferedOutputStream(soc.getOutputStream());
DataOutputStream bos = new DataOutputStream(bos);
dos.write…
1byte 입력
(1) 콘솔 입력용
FileInputStream fis = new FileInputStream(FileDescriptor.in);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
dis.read()…
(2) 파일 입력용
File file = new File("파일명");
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
dis.read()…
(3) 네트워크 입력용
Socket soc = new Socket(…);
BufferedInputStream bis = new BufferedInputStream(soc.getInputStream());
DataInputStream bis = new DataInputStream(bis);
dis.read()…
이제 간단한 형태의 입·출력 예제를 처리해 보도록 하자.
EX 01
import java.io.*;
public class Java {
public static void main(String[] args) {
File file = new File("C:\\java\\work\\abc.txt"); // C:\\java\\work\\abc.txt 에 대한 객체를 생성한다.
try {
FileOutputStream fos = new FileOutputStream(FileDescriptor.out); // 콘솔에 대한 출력 스트림을 생성한다.
FileOutputStream fos1 = new FileOutputStream(file); // 파일에 대한 출력 스트림을 생성한다.
byte[] data = {66, 68, 70, 72, (byte) '!'}; // B, D, F, H, ! 에 대한 배열을 생성한다.
fos.write(data);
fos1.write(data);
// fos.close();
// fos1.close();
}catch(FileNotFoundException fnfe){
System.err.println("파일을 못찾겠다.");
System.exit(1);
}catch(IOException io){
System.err.println("파일 입출력 에러");
System.exit(1);
}
System.out.println("실행 끝");
}
}
EX 02
import java.io.*;
public class Java {
public static void main(String[] args) throws FileNotFoundException, IOException{
/*
FileInputStream fis = new FileInputStream(FileDescriptor.in); // 키보드로부터 입력 객체를 생성한다.
System.out.print("입력 = ");
byte by = fis.read();
*/
File file = new File("C:\\java\\work\\abc.txt"); // 파일로부터의 입력 객체를 생성한다.
FileInputStream fis = new FileInputStream(file);
byte[] by = new byte[65536];
int count = fis.read(by);
for(int i = 0; i < count; i++){
System.out.println(i + " : " + (char)by[i]);
}
}
}
EX03
import java.io.*;
public class Java {
public static void main(String[] args) throws FileNotFoundException, IOException{
/*
< DataOutputStream을 풀어서 썼을 때의 코딩>
File file = new File("c:\\java\\work");
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos); // 512byte
DataOutputStream dos = new DataOutputStream(bos);
*/
// 1byte 출력을 위한 객체
DataOutputStream dos1 = new DataOutputStream(new BufferedOutputStream(new FileOutputStream
(new File(new File "c:\\java\\wordk"),"HJH.txt")))); // 파일에 대한 출력 객체를 생성
dos1.writeInt(23); // int형 숫자를 출력한다. 이것은 출력하면 파일에는 4byte의 영역을 확보하고 데이터가 표시된다.
// 그래서 결과가 이상하게 보인다.
dos1.writeDouble(12.345); // double형 숫자를 출력한다. 역시 int형과 마찬가지로 8byte의 영역을 확보 후 데이터 표시
dos1.writeBytes("ABCDEFG"); // 1byte씩 문자 형태로 출력한다. 정상적으로 보인다.
dos1.close();
}
}
EX04
import java.io.*;
public class Java {
public static void main(String[] args) {
DataInputStream dis1 = null;
try{
dis1 = new DataInputStream(new BufferedInputStream(new FileInputStream
(new File(new File("c:\\java\\wordk"),"HJH.txt")))); // DataInputStream 입력 객체를 생성한다.
} catch (FileNotFoundException fnfe){}
int a = 0;
double b = 0.0;
byte[] c = null;
try{
a = dis1.readInt(); // int형 데이터를 입력받는다. 처음 4byte를 입력받아 저장해 둔다.
b = dis1.readDouble(); // double형으로 데이터를 입력받는다. 다음 8byte를 입력받아 double형으로 변환한다.
c = new byte[10]; // 문자 배열을 선언한 후 그곳에 결과를 입력받는다.
dis1.read(c);
dis1.close();
}catch(IOException ie){}
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + new String(c));
}
}
'자바 > 자바팁' 카테고리의 다른 글
네이버 svn 설치방법 참고 (0) | 2010.12.09 |
---|---|
네이버 svn 설치방법 (0) | 2010.12.08 |
색상표 (0) | 2010.12.02 |
[펌]압축 관련 스트림 팁 (0) | 2010.12.01 |
javax.swing.event 에서의 ListDataEvent 에 관한 설명 (1) | 2010.11.17 |