Media Log


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. BlogIcon ThatO at 2014.06.12 22:19 신고 [edit/del]

    보통 다른 블로그 보면 잡소리도 많고 대충대충 설명하시는데 여기같은 경우는 유료 강의마냥 친절하고 자세하게 내용을 전달해주고 있네요. 잡소리 없이 깨끗하게 내용을 전달하는 것, 제가 약한 부분인데 닮고 싶군요. 많은 도움이 된 것 같습니다. 감사합니다.

    Reply
  3. skypds at 2014.06.21 17:33 신고 [edit/del]

    고급편은 언제부터 하나요?
    너무나도 좋은 강의 잘 보고 있습니다.
    .알기 쉽게 접근할수 있게 해주셔서 감사합니다.

    Reply
    • BlogIcon EXYNOA at 2014.06.21 19:15 신고 [edit/del]

      7월달이나 8월달 중으로 올라올 것 같습니다. 만약 그때도 바쁘다면 12월 내로 올라올 것 같네요. 과찬의 말씀 감사드립니다 (_ _)/

  4. 이진욱 at 2014.06.26 12:56 신고 [edit/del]

    강좌 잘 보고 있습니다..근데 전화번호부를 만들어서 텍스트파일로 뽑아낼려면 메인함수 안에 전화번호부 관련된것들이 들어가야되나요?

    Reply
    • BlogIcon EXYNOA at 2014.06.30 17:01 신고 [edit/del]

      전화번호부가 구체적으로 어떠한 형태의 전화번호부를 말씀하시는지는 모르겠지만, 데이터를 텍스트 파일로 내보내고 싶으시다면 메인 함수에서 처리를 해도 되고, 외부 함수에서 처리를 해도 될 것 같습니다.

  5. 이지훈 at 2014.07.21 14:40 신고 [edit/del]

    java, html 강좌 너무 많은 도움 됐습니다.
    혹시 jsp 강좌나 java 고급편, html강좌 더 올려주실 의향이 있으신지 궁금합니다.

    Reply
  6. 김송이 at 2014.08.13 14:21 신고 [edit/del]

    아! 24편까지 오면서 감사를 참을 수 없어서 답글 달았는데 25편이 마지막이었네요^^
    선플후 수강합니다~다시한번 감사합니다!

    Reply
  7. 성주호 at 2014.08.26 15:39 신고 [edit/del]

    자바 처음 접했는데 너무 재밌게 잘 배웠습니다.
    다른 강좌들도 기대가 됩니다.
    쉽고 재밌게 배울 수 있게 해 주셔서 고맙습니다^^

    Reply
  8. BlogIcon 주현미 at 2014.09.29 22:52 신고 [edit/del]

    책이나 다른 동영상 강의보다도 도움이 많이 되네요!ㅎ 고급편도 속히 부탁드려요 기다리고있답니다ㅠㅎ

    Reply
  9. jeon at 2014.10.28 17:55 신고 [edit/del]

    깔끔하게 정리된 강의 너무 좋습니다.
    이런 좋은 내용을 잘 정리해주셔서 공개해주시다니, 정말 감사합니다.

    Reply
  10. oracle at 2015.01.06 18:00 신고 [edit/del]

    강의 잼있게 잘 봤습니다

    추가 강의는 이제 안하시나요??

    Reply
  11. hs at 2015.01.12 16:48 신고 [edit/del]

    강좌 정말 도움이 많이 되었습니다.
    강좌 열어주셔서 감사드립니다.

    Reply
  12. sacho at 2015.01.13 16:13 신고 [edit/del]

    강좌 올려주셔서 감사합니다. 처음으로 자바를 접했는데 어렵지 않게 접근할 수 있도록 도와 주셔서 감사합니다.

    Reply
  13. 지나가다 들렸슴다 at 2015.04.29 13:57 신고 [edit/del]

    좋은 강좌 보고 갑니다. 앞으로도 자주 오겠습니다.

    Reply
  14. java 입문생 at 2015.10.03 18:28 신고 [edit/del]

    정말많이배우고갑니다.
    오늘 반나절동안 자바에 관한 님 포스팅으로 많은 공부를 했습니다.
    정말 감사합니다~

    Reply
  15. 감사합니다 at 2016.01.08 17:42 신고 [edit/del]

    감사합니다.
    빠른 시간안에 즐겁게 배우고 갑니다.

    Reply
  16. 교과서 같은 정리 at 2016.11.06 22:59 신고 [edit/del]

    정말 교재 같았어요!..
    그런데 정말 어렵네요 ㅠㅠ 웹페이지 개발 한다고 별 공부를 다했는데
    컴퓨터 언어에서 많이 걸리네요.

    Reply
  17. 조창 at 2017.01.10 18:48 신고 [edit/del]

    최고이십니다.
    많이 배우고 있습니다.

    Reply
  18. 서완우 at 2017.01.16 15:26 신고 [edit/del]

    쉽게 설명해 주셔서 감사합니다. 네트워크 부분으로 고급강좌를 하실 생각은 없으세요?
    부탁드립니다.

    Reply
  19. 맛난거먹자 at 2017.01.26 09:51 신고 [edit/del]

    명강의 정말 감사드립니다!
    C/C++만 10년이상 보아온 사람으로써 꼭 필요한 내용을 정말 잘 정리해주셔서 빠르게 이해할 수 있었습니다.
    건승하시길 바랍니다!

    Reply
  20. 우왕! at 2017.06.20 15:11 신고 [edit/del]

    정말 감사드려요 학교다닐때 배우던거 복습하려고 장의 찾던중에 찾았는데 정말 설명이 제일 잘돼있는거 같습니다

    Reply
  21. 자바 at 2017.07.12 20:16 신고 [edit/del]

    감사합니다.

    BufferedInputStream과 BufferedOuputStream의 장단점에 대해 설명해주실수 있을까요?

    Reply

submit

티스토리 툴바