이번시간은 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();
	}
 
}


[실행 결과]

RandomAccessFile.PNG


위 실행 결과를 보면 포인터 위치가 5씩 증가하면서 5문자씩 출력합니다. 쉽죠?

읽어들일 사이즈의 seekSize값을 바꿔서도 실행 해보세요. 


감사합니다.