2008년 09월 09일
파일 입출력 예제.
import java.io.*;
public class File_test
{
public static void main(String args[])
{
try{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("세이브 할 내용을 적어 주세요.");
String str = br.readLine(); // 키보드 입력을 받는다.
File save_txt = new File("test.txt"); // 저장 될 파일명
PrintWriter pw = new PrintWriter(new FileWriter(save_txt,true));
// 저장될 파일에 쓰기 위해 선언. 파일명 뒤에 따라오는 것은 새로 쓰기(false) 또는 하단이 이어 쓰기(true) 조건
pw.println(str); // 파일 쓰기과정
pw.flush(); // 버퍼에 남아 있을 수 있는 데이터 찌거기 제거.
pw.close(); // 파일을 쓰고 나면 끝을 알려야 한다(파일을 다 쓰고 닫기).
System.out.println("\n------------------\n파일 내용\n------------------");
BufferedReader open = new BufferedReader(new FileReader("test.txt"));
// 읽기 준비과정. 버퍼드리더를 통해서 읽어 들인다.
String str2 = null; // 읽어 들인 내용을 비교, 저장 하기 위해 선언
while((str2=open.readLine())!=null){ // 한 라인에 내용이 없을 때 까지 루프 동작.
String x[] = str2.split("\n"); //split를 통해 어디 까지 한 라인으로 읽을 것인가를 정한다.
for(int i=0;i<x.length;i++){ // 읽어 들인 내용을 화면에 보여준다.
System.out.println(x[i]);
}
}
System.out.println("------------------");
open.close(); // 파일 읽기 또한 파일 읽기가 끝나면 닫아 줘야 한다.
}catch(Exception e){} // 예외 처리 부분.
}
}
위 예제는 파일을 쓰기와 읽기의 예제이다.
소스를 보면 파일을 쓰는 것보다 읽기가 어렵다. 쓰는 것은 단순히 파일 클래스를 이용해서
써 넣을 내용을 PrintWriter를 통해서 쉽게 저장이 가능하다.
여기서 조금 중요하다면 파일을 새로 쓸 것인가? 이어 쓸 것인가?의 문제이고
파일을 쓰고 나면 데이터의 찌거기 처리와 파일 쓰기 종료를 반드시 해줘야 하는 부분일 것이다.
이해를 위해 간단하게 알아보자.
파일을 덧 붙여 쓰는것은 true, 새로 쓰는 것은 false 조건이다.
그리고 파일을 쓰는 PrintWriter은 API를 통해서 정보를 더 확인하길 바란다.
다만 텍스트 파일 쓰기와 바이너리 파일 쓰기는 다르다. 위에 예제는 텍스트 파일 쓰기 예문이고
좋은 예문이라 할 수 있겠다. ^^;
그럼 조금의 이해가 필요한 파일 읽기 부분에 대해서 해석해보자.
파일 읽기는 키보드 입력을 받아 들이는 것과 매우 흡사하다. 다른 것이 있다면 라인 끝부분일 것이다.
BufferedReader open = new BufferedReader(new InputStreamReader(System.in));
BufferedReader open = new BufferedReader(new FileReader("test.txt"));
키보드 입력 예제 때 언급을 하지 않았는데 위 라인은 키보드 입력 흐름을 읽어 들이는 것이다.
파일읽기가 키보드 입력과 비슷한 이유는 과정이 비슷하다고 생각을 하도록 하자.
버퍼에 읽어 들이는데 키보드 입력은 InputStreamReader 이고 파일은 FileReader 쉽지 않는가?
그런데 조금 잘 이해를 해야 하는 부분은 바로 와일문 루프 일 것이다.
한 라인을 읽어 들이면서 null값이 아니면 조건이 성립(참)하므로 루프를 돈다.
값이 없다면(null)이면 조건이 거짓이므로 루프를 빠져 나가는 조건이다.
잘 생각해보도록 하자. 파일에 읽어야 하는 텍스트 라인이 있다면 반드시 읽어서 보여줘야 하기 때문에
위와 같은 조건이 나오는 것이다.
그리고 split가 조금 이해가 어려울 것이다. 보통 배열은 String str = new String[3]; 이 조건으로 선언 했었다.
그러나 split로 선언한 이유는 split는 한 라인의 내용을 어떻게 나눠서 배열에 넣을 것인가를 정해준다.
사람으로 치면 책을 읽을 때 문단이라 생각을 하자. 그게 쉬운 이해법이다.
보통 한 라인을 읽어 들이면 띄어 쓴 부분을 가지고 나누기도 하지만 한 라인 전체를 읽고 싶다면
개행문자인 \n을 쓰면 된다. 개행 문자 없이 한 라인 전체를 읽고 싶다면 아무 문자 없이 ""로 묶어도 되는 듯 하다.
이미 위에서 읽어 들일 때 한 라인을 읽으라 했으므로 개행 되기 전 까지의 문자열을 읽기 때문이다.
그리고 루프문 안에 for문은 특별히 언급하지 않겠다.
for문도 모르고 파일 입출력 예제를 본다는 것은 바보짓이므로~
그럼 이번 파일 클래스 예제는 이상 끝이다.
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- 파일 크기 비교 방법. by 만성피로
- 바이트 단위의 입력 파일 스트림(어제와 이어서..) by element
- [2주차-2]입출력 복습 by 강동성
- 자바2주째 두번째 일기 by 파브레가스
- [강의] 시스템프로젝트 강좌소개 및 기초 자바 연습 by 레드락
# by | 2008/09/09 21:12 | 정리할 자료들 | 트랙백 | 덧글(1)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]