끝나지 않는 프로그래밍 일기


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에 대해 간단히 알아보았습니다. 스트림에 대한 추가 설명이 필요하시면 달아드리도록 하겠습니다.


자바 강좌는 파일 입출력을 마지막으로 하여 끝내도록 하겠습니다. 지금까지 자바 강좌를 정독하여 주셔서 정말 감사합니다. 여기까지 오시느라 대단히 수고하셨습니다. 스윙 컴포넌트나, 네트워크 프로그래밍 등도 설명하려 했으나 파일 입출력에서 마무리 짓게 되었습니다. 이 부분은 따로 강좌 요청을 댓글로 해주시면 고급편으로 따로 올려드리도록 하겠습니다.