본문 바로가기

자바I/O

JAVA I/O (자바입출력) - PrintStream / PrintWrite 클래스 PrintStream이란 무엇가 출력장치에 상관없이 조금더 편하고 쉽게 출력을 도와주는 스트림 클래스이다. 예를 들어 print()나 println()도 다 여기 범주에 포함된다. 그런데 그 만큼 사용자 입장에서 만든것이기 때문에 정교하게 하는것은 약간 무리다. 우선 처음 해야 할 일은 자바 API를 보자. http://docs.oracle.com/javase/7/docs/api/ 예제를 살펴보자. 이전에 했던 스트림읽기와 차이점이 별로 없다. 파일을 읽어서 버퍼에 넣고 while문으로 돌려서 찍는다. 항상 close()를 잊지 말자. 두번째 예제를 보자 저장된 파일을 읽어다가 화면에다 찍는것이다. 보면 PrintWriter함수 중에는 printf라는 메소드가 있는데 이는 표준 출력함수다. 문자열이나 특.. 더보기
JAVA I/O (자바입출력) - FileReader와 FileWriter 클래스 바이트 스트림의 FileInputStream과 FileOutputStream의 문자스트림을 처리하는 버전이라고 보면 되겠다. 내용은 거의 비슷하다. 입력한 값을 파일에 써서 저장을 먼저 해보자. 위의 예제를 보면 BufferedReader를 사용해서 한라인씩 찍는다. 소소를 보면 이전에 했던걸 기억하면 그다지 크게 어려움은 없다. 그럼 파일이 잘 생성되고 써졌나. 읽어보자. 아래 예제를 보자. 읽는건 정말 간단하자. 더보기
JAVA I/O (자바입출력) - RandomAccessFile 원래 스트림(Stream)은 원칙적으로 순서대로 처리 된다. 하지만 예외적으로 접근처리를 할 수 있는것이 있다. 바로 RandomAccessFile이라는 것이다. 말 그대로 임의로 파일에 접근하는것이다. 자바 API를 보면 이 클래스는 Input이나 OutputStream같은 Stream으로 상속 받는게 아니고 바로 위의 클래스가 Object다. 메소드들 중 살펴볼 만한것은 seek메소드다. 레코드 바늘 처럼 원하는 곳을 찍어서 갈 수 있다. 무슨말이냐면 데이터 1,2,3,4,5,6을 Stream객체를 사용해서 쓰면 가져올때도 순차적으로 가져와야 하는데 RandomAccessFile을 쓰면 위치를 지정해서 꺼내올수 있다. 예제를 살펴보자. 우선 저장할 더블 배열 값을 선언한다. RandomAccessFi.. 더보기
JAVA I/O (자바입출력) - PipedInputStream과 PipedOutputStream 도스나 유닉스의 명령어를 생각하면 쉽다. 예를 들어 도스에서 'type 파일명 | sort' 이런 것과 같다. PipedInputStream과 PipedOutputStream을 보기전에 일단 자바API를 보자 http://docs.oracle.com/javase/7/docs/api/ 이중에서 유의깊게 볼 메소드 connect라는 메소드다..말 그대로 연결. 아래 예제는 Thread를 이용하였다. 결론은 쓰레드 두개를 생성해서 키보드로 친것을 파이프 연결해서 화면으로 뱉어 내겠다는 것이다. package ck.io; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PipedIn.. 더보기
JAVA I/O (자바입출력) - ByteArrayInputStream 과 ByteArrayOutputStream ByteArrayInputStream 과 ByteArrayOutputStream는 역시 바이트 스트림 방식이다. 이름 그래도 ByteArray단위로 읽고 출력한다. 한 바이트를 단위가 아니고 우선 자바 API를 보자. 해당 클래스에 메소드를 확인하는건 중요하다. http://docs.oracle.com/javase/7/docs/api/ 예제로 보자 더보기
JAVA I/O (자바입출력) - DataInputStream 과 DataOutputStream 처음에 DataInputStream과 FileInputStream과의 차이점이 애매하다고 생각했다. 그냥 파일에 쓰는거 똑같은데 아무거나 쓰면 안되나하고. DataInputStream은 이진 데이터(0,1)를 입출력 할때 사용한다. 예를 들어 10이나 3.14를 입력할때 FileInputStream으로 하면 파일에 써지지만 만약 10은 int(4바이트)형으로 3.14는 double(8바이트)형으로 저장을 할때 쓴다. 결국 해당 value의 데이터형을 그대로 가지고 저장 된다. DataInput / Output Stream은 일종의 필터스트림이다. 참고로 상위 클래스가 FilterInputStream 이란 놈이다. 그리고 DataInputStream과 DataOutputStream은 각 타입(int, fl.. 더보기
JAVA I/O (자바입출력) - FileInputStream와 FileOutputStream를 이용한 파일 복사 이전글에 각각 FileInputStream과 FileOutputStream을 이용해 봤다. 모르면 아래 주소에서 http://happyourlife.com/77 그러면 이 두개를 이용하면 파일을 복사 할수 있다. 우선 FileInputStream으로 파일 내용을 읽어서 FileOutputStream으로 다른 파일에 읽어드린 내용을 쓰면 될것이다. 예제도 정말 간단하다. 기억하자. 별거 아니다. 위의 에제를 실행해보면 test.txt파일을 읽어서 test2.txt에다 읽은 내용을 쓴다. 일단 이 예제의 전제 조건은 test.txt파일안에 내용이 있을것 두번째는 test.txt와 test2.txt파일이 존재 할것이다. 사실 나중에 File클래스를 하다 보면 파일이나 폴더가 있는지 없는지 체크해서 생성후 쓰고.. 더보기
JAVA I/O (자바입출력) - InputStream과 OutputStream 자바 I/O중 바이트 스트림에 관련된 가장 최상이 클래스인 InputStream과 OutputStream 간단한 예제를 보자. (참고로 영문은 1바이트, 한글은 2바이트이다.) import java.io.IOException; public class ByteStreamTest { public static void main(String[] args) throws IOException{ byte data[] = new byte[20]; // 외부에서 읽어드린 데이터를 저장 하는 변수 선언.(바이트니까 바이트 객체로..20바이트만 읽음. 배열 갯수는 알아서) System.out.println("Input data : "); System.in.read(data); //System.in.read(data)를 쓰면.. 더보기
JAVA I/O (자바입출력) - 자바 스트림(Stream) A. 스트림이란 1. 스트림(Stream)은 파일이나 키보드, 모니터 등의 입출력 장치나 네트워크, 메모리등으로부터 데이터를 입출력할 때 사용하는 처리를 정의해 둔 것 2. 스트림이라는 영어 어원처럼 (시냇물) 양방향이 아니고 단방향이다. 데이터 처리가 많을때는 지연 될 수도 있다. B. Stream의 종류 1. 바이트 스트림(byte stream) - 1바이트씩 전송 * 존재 이유 : 컴퓨터는 2진수로 데이터 처리, 진수라는것은 bit를 의미 8bit가 1byte이므로 바이트 스트림 존재 * 주로 하드웨어 접근 할때는 바이트 스트림으로 처리 * 가장 큰 부모 클래스(추상) : InputStream, OutputStream 2. 캐릭터 스트림(character stream) - 2바이트씩 전송 * 문자 .. 더보기