1. 자바 입출력 이란?
1) 프로그램 사용시 발생하는 컴퓨터 내부/외부 데이터의 입력과 출력을 담당하는 클래스
2) 입출력 대상을 연결하기 위해 Stream이라는 매개체를 사용하며 문자열데이터나 파일, 바이트 등으로 소캣통신을 할 수 있다.
2. 스트림(Stream)
1) 데이터를 송/수신, 입출력을 위한 통로
2) 단방향 통신을 제공하므로 입력 출력을 수행하기 위해 2개의 스트림이 필요
3. 스트림의 종류
1) 바이트 – 1byte의 문자, 문자열을 읽고 씀
종류 | 기능 | |
FileInputStream | FileOutputStream | 바이트 단위로 파일 읽기/쓰기 |
BufferedInputStream | BufferedOutputStream | 버퍼링을 사용하여 읽기/쓰기를 향상 |
DataInputStream | DataOutputStream | Java의 기본 데이터 형을 읽기/쓰기 |
ObjectInputStream | ObjectOutputStream | Java의 기본 데이터 형, 객체를 읽기/쓰기 |
PrintStream | System.out 을 통한 출력 |
2) 문자 – 2byte의 문자, 문자열을 읽고 씀(한글에 용이)
종류 | 기능 | |
BufferedReader | BufferedWriter | 버퍼링을 사용하여 읽기/쓰기를 향상 |
FileReader | FileWriter | 2바이트 단위로 파일을 읽기/쓰기 |
PrintWriter | 스트림에 출력 |
3) 스트림 변환 – 문자와 바이트 간의 상호 변환
종류 | 기능 |
InputStreamReader | 바이트 -> 문자 |
OutputStreamReader | 문자 -> 바이트 |
4. 예제 소스
자바 입출력 기능을 이용하여 파일을 생성하고 읽는 예제를 알아보겠습니다.
- 바이트 스트림 파일 쓰기
import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; public class ByteStreamFW { public static void main(String[] args) throws IOException { //바이트 스트림 시작 FileOutputStream fos = new FileOutputStream("C:/Test.txt"); //파일 아웃풋 스트림을 이용해 c:/Test.txt를 씀 BufferedOutputStream bos = new BufferedOutputStream(fos); //퍼버에 담긴 내용을 바탕으로 Test.txt에 저장 char[] a = {'I',' ','a','m',' ','T','e','s','t'}; //캐릭터 배열을 선언 for(int i=0; i<a.length; i++){ bos.write(a[i]); //캐릭터 배열을 순서대로 읽어 파일로 씀 bos.flush(); } System.out.println("바이트 스트림 파일 쓰기 완료"); bos.close(); fos.close(); } }
파일 아웃풋스트림을 이용하여 c드라이버 txt 파일을 저장하는 예제입니다.
해당 소스를 구동하면 i am test라는 txt파일이 c드라이브에 생성됩니다.
- 바이트 스트림 파일 읽기
import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; public class ByteStreamFR { public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("C:/Test.txt"); //파일 인풋스트림을 이용해 c:/Test.txt를 읽음 BufferedInputStream bis = new BufferedInputStream(fis); //성능 향상을 위해 BufferedInputStream을 사용 int i =0; while((i=bis.read())!=-1){ // 문자가 없을 때까지 1byte씩 읽음 System.out.print((char)i); //정수형 타입으로 담긴 문자를 형변환을 통해 출력 } bis.close(); fis.close(); } }
파일 쓰기를 통해 생성된 파일을 자바를 통해 읽은 모습입니다.
- 한글 입출력이 가능한 BufferedWriter
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class MunjaStreamFW { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("C:/Test1.txt"); //파일생성 BufferedWriter bw = new BufferedWriter(fw); //버퍼를 사용하여 버퍼에 담긴 문자열을 fw에 저장된 txt문서에 저장 String[] han ={"한","글","이","됩","니","다"}; //저장할 배열 선언 for(int i=0; i<han.length; i++){ bw.write(han[i]); //han 변수의 i번째 요소를 write bw.flush(); } System.out.println("문자스트림 파일 쓰기 완료"); bw.close(); fw.close(); } }
버퍼드라이터를 통해 파일을 쓸때 한글이 표현되는 모습입니다.
- BufferedWriter 읽기
import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class MunjaStreamFR { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("C:/Test1.txt"); //파일을 읽음 BufferedReader br = new BufferedReader(fr); //파일에 써진 내용을 버퍼에 저장 boolean result= true; while(result){ String str = br.readLine(); //버퍼의 담긴 한라인의 문장을 변수에 저장 if(str == null){ result = false; //str이 null이면 읽기가 종료 }else{ System.out.println(str); //str이 null이 아니면 읽은 라인을 출력 } } br.close(); fr.close(); } }
쓰여진 파일 또한 읽기가 가능합니다.
5. 마치며…
이렇게 자바 입출력 클래스를 통해서 파일을 쓰고 읽을 수가 있는데요.
실무에서는 엑셀이나 csv등의 파일을 다루는 경우가 많으니 예제를 통해 기능을 익혀보시기 바랍니다.
답글 남기기