사원의 정보를 RandomAccessFile 을 이용하여 저장하고 검색하는 예
검색에 문제가 있는 것을 확인해 보세요.
import java.io.*;
class RandomFileTest02
{
public static void main(String[] args) throws Exception
{
RandomAccessFile raf = new RandomAccessFile("emp.dat", "rw");
// 사번(int) 사원이름(String) 부서명(String) 주소(String) 급여(int)
raf.writeInt(1000); // 4바이트로 제한함
raf.write("홍길동".getBytes()); // 8바이트
raf.write("총무과".getBytes()); // 10바이트
raf.write("서울시 광진구 군자동".getBytes()); // 50바이트
raf.writeInt(200000); // 4바이트
raf.writeInt(1004);
raf.write("김인철".getBytes());
raf.write("시스템지원과".getBytes());
raf.write("경기도 의정부시".getBytes());
raf.writeInt(3000000);
// 홍길동의 주소만 가져와서 출력한다.
raf.seek(16); // 파일포인터를 주소필드 앞에 위치한다
byte[] buf = new byte[64]; // 주소를 읽어와서 저장할 공간을 준비한다
raf.read(buf, 0, 20); // 주소가 차지하는 공간이 총 20바이트이므로 현재 위치에서 20바이트를 읽어온다
String address = new String(buf, 0, 20); // 바이트를 문자열로 변환한다
System.out.println(address);
// 김인철의 주소를 가져와서 출력해 본다.
raf.seek(62);
raf.read(buf, 0, 15);
address = new String(buf, 0, 15);
System.out.println(address);
}
}
/*
* 2번째 사원의 주소만 가져와서 출력해 보세요
* 레코드 수가 점차 증가하면 이런식으로 레코드를 검색하는 것은 한계가 있다.
* 각 필드의 바이트 수와 한개의 레코드 바이트 수를 미리 정해 놓지 않으면 검색이 어렵게 된다.
*/