본문 바로가기

Java SE/RandomAccessFile 02

RandomAccessFile 02

사원의 정보를 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번째 사원의 주소만 가져와서 출력해 보세요
 * 레코드 수가 점차 증가하면 이런식으로 레코드를 검색하는 것은 한계가 있다.
 * 각 필드의 바이트 수와 한개의 레코드 바이트 수를 미리 정해 놓지 않으면 검색이 어렵게 된다.
 */