강좌 & 팁
글 수 2,412
2014.01.18 12:58:25 (*.52.177.249)
46674
이번시간은 RandomAccessFile클래스에 대해 알아 보도록 하겠습니다.
RandomAccessFile클래스는 말그대로 파일을 랜덤하게 읽고 쓸수 있는 클래스 입니다.
RandomAccessFile클래스를 생성시 mode옵션으로 읽기 전용또는 읽고 쓰기가 가능한 클래스 입니다.
생성자는 두가지 가 있습니다.
new RandomAccessFile(파일패스, 모드);
new RandomAccessFile(파일, 모드);
간단한 샘플을 만들어 봤습니다.
사용하는 메소드는 다음과 같습니다.
RandomAccessFile.length() : 파일 길이 반환
RandomAccessFile.seek(포인터 위치값) : 포인터 위치값을 설정
RandomAccessFile.read(바이트배열) : 현 포인터 위치에서부터 바이트 배열 길이만큼 읽어 들임
RandomAccessFile.getFilePointer() : 현 포인터 위치를 반환
RandomAccessFile.close() : 파일 닫기
파일 내용 아래의 내용을 test.txt로 만들어서 사용하세요.
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
위의 파일 내용을 5문자씩 출력하는 샘플 소스 입니다.
/test.txt는 프로그램 실행시키는 곳이 C드라이브면 C드라이브 밑에 test.txt파일이 있어야합니다.
[샘플 소스]
import java.io.IOException; import java.io.RandomAccessFile; public class RandomAccessFileTest { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // 읽어들일 사이즈 int seekSize = 5; // 읽기 전용으로 파일을 읽음. RandomAccessFile rdma = new RandomAccessFile("/test.txt","r"); String line = ""; // 전체 문자열을 출력 while ((line = rdma.readLine()) != null) { System.out.println(line); } // 문자열 총 길이 System.out.println("total length : " + rdma.length()+"\n"); byte[] data = null; // 루프 사이즈 = 총길이/seekSize + (총길이%seekSize의 나머지가 0이면 0을 반환 0이아니면 1을 반환) long size = rdma.length()/seekSize+(rdma.length()%seekSize == 0 ? 0:1); for (int i = 0; i < size; i++) { data = new byte[seekSize]; // seekSize 만큼 증가 rdma.seek(i*seekSize); rdma.read(data); // 바이트 데이터를 문자열로 변환(trim()을 사용해 공백을 제거) System.out.printf("pointer : %02d str : %s \n" , rdma.getFilePointer(), new String(data).trim()); } // 파일 닫기 rdma.close(); } }
[실행 결과]
위 실행 결과를 보면 포인터 위치가 5씩 증가하면서 5문자씩 출력합니다. 쉽죠?
읽어들일 사이즈의 seekSize값을 바꿔서도 실행 해보세요.
감사합니다.