JSP日記 ファイルロックの勉強 04.1.8
1. ファイルロックを勉強してみる
ずっと避けてきたファイルロック。なんというか、よく使い方がわかんないんですよねぇ、java.nio.channels.FileChannel。
ずーっと避ける訳にも行かないので、まじめに勉強してみました。
2. 参照したサイト
とりあえず、APIリファレンスの説明を読んでみるが、やっぱりよくわかんね・・・。google先生教えてくださーいという感じで、
http://www5.airnet.ne.jp/sakuraba/java/laboratory/JDK1.4/NewIO/FileChannel/FileChannel.html
http://www-6.ibm.com/jp/developerworks/java/030530/j_j-mer03253.html
このあたりのページを読んでみた。
とりあえず、上記サイトのサンプルコードを参考に、試行錯誤してみました。
FileInputStreamとかFileOutputStreamからgetChannel()し、lock()しても例外が発生してしまうようなので、サンプルどおりjava.io.RandomAccessFileにしてみた。さらに、"rw"じゃないとダメっぽい。
とりあえず、こんな感じに落ち着いた(サンプルどおり・・・)。
書き込む場合
ファイルの最後に書き込むために、Channel.positionでファイルの最後に移動してみました。
RandomAccessFile raf = new RandomAccessFile(file,"rw");
FileChannel ch = raf.getChannel();
FileLock flock = raf.tryLock();
ByteBuffer buf = ByteBuffer.wrap(...);
ch.position(ch.size()); // ファイルの一番最後に移動
ch.write(buf);
ch.close();
flock.release();
読み込む場合
RandomAccessFile raf = new RandomAccessFile(file,"rw");
FileChannel ch = raf.getChannel();
FileLock flock = raf.tryLock();
ByteBuffer buf = ByteBuffer.allocate((int)ch.size());
ch.read(buf);
ch.close();
flock.release();
ファイルにデータを書き込んで、読み出すJSPページ test06.jsp とtest06.jspの書き込み処理に10秒間sleepするようにしたtest06-1.jspを作成して実験してみた。
ん・・・test06-1.jspで書き込んでる最中にtest06.jspで書き込んでも大丈夫っぽい?良くわからないけど、大丈夫だろう?サンプルどおりだし・・・
test06.jsp test06-1.jsp

図4.-1 大丈夫っぽい?
これで、ファイル壊れないかなぁ?って感じ。
とりあえず、これを組み込んで行こうかな?
戻る