1. 파일 입출력(File input and output)
이번에는 파일 입출력에 대해서 알아보도록 하기 전에, 스트림(Stream)에 대해 간단히 알아보도록 하겠습니다. 스트림은 1차원적인 데이터의 흐름을 의미합니다. 자바는 이 스트림을 가지고 입출력을 처리하며, 이 스트림은 흐름의 방향(입력 스트림, 출력 스트림)과 데이터의 형태(문자 스트림, 바이트 스트림)에 따라 나뉩니다. (문자 스트림은 문자 혹은 문자열을 읽어들일 때 사용하고, 바이트 스트림은 말그대로 바이트를 읽을 때 사용됩니다. 예를 들어, 그림이나 실행 파일 등등..) 파일 입출력에서는 FileInputStream과 FileOutputStream, FileReader, FileWriter 등 여러가지 스트림 클래스가 쓰입니다.
파일 입출력은 파일에 내용을 입력하거나, 파일에 있는 내용을 출력하는 것을 말합니다. 간단하게, 예제를 한번 살펴보고 그 예제에 쓰인 새로운 부분을 중점으로 하여 설명을 드리도록 하겠습니다. 다음은 FileReader 클래스를 이용하여 파일을 읽어오는 예제입니다.
FileReader:
import java.io.*;
class FileTutorial {
public static void main(String[] args) throws IOException {
// 예외가 발생하면 외부로 던져버림!
FileReader reader = new FileReader("c:\\test.txt");
int ch;
while((ch = reader.read()) != -1) { // 하나하나씩 받아오고 출력시킨다!
System.out.print((char)ch);
}
reader.close(); // 스트림을 다 썼으면 닫아주어야 한다.
}
}
결과(c:\test.txt의 내용):
12345678910
여기서 쓰인 FileReader 클래스는 텍스트 파일을 읽는 클래스 입니다. 출력의 대상이 텍스트 파일이고, 단위는 문자입니다. 다음으로 FileWriter 클래스를 이용하여 파일을 쓰는 예제입니다.
FileWriter:
import java.io.*;
class FileTutorial {
public static void main(String[] args) throws IOException {
FileWriter reader = new FileWriter("c:\\test.txt"); // 텍스트 파일이 없으면 새로 생성함!
reader.write("입출력!"); // 파일에 "입출력!"을 저장함.
reader.append('!'); // 파일의 끝에 ! 문자를 추가시킴.
reader.close(); // 파일을 닫음.
}
}
결과(c:\test.txt의 내용):
입출력!!
다음은 FileInputStream 클래스를 이용하여 파일로부터 바이트 단위로 데이터를 읽는 예제입니다.
FileInputStream:
import java.io.*;
class FileTutorial {
public static void main(String[] args) throws IOException {
FileInputStream in = new FileInputStream("C:\\test.txt");
int ch;
while((ch = in.read()) != -1) { // 하나하나씩 받아오고 출력시킨다!
System.out.print((char)ch);
}
in.close(); // 파일을 닫음.
}
}
결과(c:\test.txt의 내용):
12345678910
다음은 FileOutputStream 클래스를 이용하여 파일에 바이트 데이터를 쓰는 예제입니다.
import java.io.*;
class FileTutorial {
public static void main(String[] args) throws IOException {
FileOutputStream out = new FileOutputStream("C:\\test.txt", false);
// true로 두면 이어서 쓰고, false로 두면 새로 쓴다.
int ch;
for(int i = 'a'; i <= 'z'; i++) { // a부터 z까지 파일에 입력한다!
out.write(i);
}
out.close(); // 파일을 닫음.
}
}
여기까지, 파일 입출력에 쓰이는 스트림 클래스 FileWriter, FileReader, FileInputStream, FileOutputStream에 대해 간단히 알아보았습니다. 스트림에 대한 추가 설명이 필요하시면 달아드리도록 하겠습니다.
자바 강좌는 파일 입출력을 마지막으로 하여 끝내도록 하겠습니다. 지금까지 자바 강좌를 정독하여 주셔서 정말 감사합니다. 여기까지 오시느라 대단히 수고하셨습니다. 스윙 컴포넌트나, 네트워크 프로그래밍 등도 설명하려 했으나 파일 입출력에서 마무리 짓게 되었습니다. 이 부분은 따로 강좌 요청을 댓글로 해주시면 고급편으로 따로 올려드리도록 하겠습니다.
'프로그래밍 관련 > 자바/자바 스크립트' 카테고리의 다른 글
자바스크립트 강좌 1편. 시작 (2) | 2016.05.09 |
---|---|
JAVA 강좌 25편. 파일 입출력(File input and output) (39) | 2012.08.25 |
JAVA 강좌 24편. 스레드(Thread) (9) | 2012.08.25 |
JAVA 강좌 23편. 예외 처리(Exception Handling) (8) | 2012.08.25 |
JAVA 강좌 22편. 콘솔 입출력(Console input and output) (1) | 2012.08.24 |
JAVA 강좌 21편. 인터페이스(Interface) (8) | 2012.08.23 |
보통 다른 블로그 보면 잡소리도 많고 대충대충 설명하시는데 여기같은 경우는 유료 강의마냥 친절하고 자세하게 내용을 전달해주고 있네요. 잡소리 없이 깨끗하게 내용을 전달하는 것, 제가 약한 부분인데 닮고 싶군요. 많은 도움이 된 것 같습니다. 감사합니다.
고급편은 언제부터 하나요?
너무나도 좋은 강의 잘 보고 있습니다.
.알기 쉽게 접근할수 있게 해주셔서 감사합니다.
강좌 잘 보고 있습니다..근데 전화번호부를 만들어서 텍스트파일로 뽑아낼려면 메인함수 안에 전화번호부 관련된것들이 들어가야되나요?
java, html 강좌 너무 많은 도움 됐습니다.
혹시 jsp 강좌나 java 고급편, html강좌 더 올려주실 의향이 있으신지 궁금합니다.
아! 24편까지 오면서 감사를 참을 수 없어서 답글 달았는데 25편이 마지막이었네요^^
선플후 수강합니다~다시한번 감사합니다!
자바 처음 접했는데 너무 재밌게 잘 배웠습니다.
다른 강좌들도 기대가 됩니다.
쉽고 재밌게 배울 수 있게 해 주셔서 고맙습니다^^
책이나 다른 동영상 강의보다도 도움이 많이 되네요!ㅎ 고급편도 속히 부탁드려요 기다리고있답니다ㅠㅎ
깔끔하게 정리된 강의 너무 좋습니다.
이런 좋은 내용을 잘 정리해주셔서 공개해주시다니, 정말 감사합니다.
강의 잼있게 잘 봤습니다
추가 강의는 이제 안하시나요??
강좌 정말 도움이 많이 되었습니다.
강좌 열어주셔서 감사드립니다.
강좌 올려주셔서 감사합니다. 처음으로 자바를 접했는데 어렵지 않게 접근할 수 있도록 도와 주셔서 감사합니다.
좋은 강좌 보고 갑니다. 앞으로도 자주 오겠습니다.
정말많이배우고갑니다.
오늘 반나절동안 자바에 관한 님 포스팅으로 많은 공부를 했습니다.
정말 감사합니다~
감사합니다.
빠른 시간안에 즐겁게 배우고 갑니다.
정말 교재 같았어요!..
그런데 정말 어렵네요 ㅠㅠ 웹페이지 개발 한다고 별 공부를 다했는데
컴퓨터 언어에서 많이 걸리네요.
최고이십니다.
많이 배우고 있습니다.
쉽게 설명해 주셔서 감사합니다. 네트워크 부분으로 고급강좌를 하실 생각은 없으세요?
부탁드립니다.
명강의 정말 감사드립니다!
C/C++만 10년이상 보아온 사람으로써 꼭 필요한 내용을 정말 잘 정리해주셔서 빠르게 이해할 수 있었습니다.
건승하시길 바랍니다!
정말 감사드려요 학교다닐때 배우던거 복습하려고 장의 찾던중에 찾았는데 정말 설명이 제일 잘돼있는거 같습니다
감사합니다.
BufferedInputStream과 BufferedOuputStream의 장단점에 대해 설명해주실수 있을까요?