January 11th, 2007
Java에서 OS의 File Lock 쌩까기

C:\Temp\lock.xls 라는 파일을 만들고 Excel로 연다.
엑셀을 포함한 대부분의 Editor(non viewer)는 File에 대한 Lock(Exclusive Lock)을 유지한다.
하지만 Memory Mapped File I/O를 쓰면 아무 문제없이 수정할 수 있다.
자바도 1.4부터는 nio가 들어가면서 Memory Mapped File I/O를 지원하기 때문에 얼마든지 말아먹을 수 있다.

JAVA:
  1. public static void main(String[] args) throws IOException {
  2.     RandomAccessFile raf = new RandomAccessFile("C:/Temp/lock.xls","rw");
  3.     FileChannel ch = raf.getChannel();
  4.     MappedByteBuffer mbuf = ch.map(MapMode.READ_WRITE, 0, ch.size());
  5.     mbuf.put("Hello".getBytes());
  6.     raf.close();
  7. }

이를 실행시키고 Excel을 닫은 뒤 다시 열면 깨진파일이라 나온다.

짤방은 수상한(?) 이영아 입니다.
cnt_star070109101044390.jpg

P.S) 이 문제를 찾는데 도움을 준 Chan 씨 블로그도 종종 들러주삼 ^^