import java.io.*; import java.nio.channels.*; /** * 锁住文件(不让其它线程或进程修改) * * @author kingfish */ public class LockFile { public LockFile() { } public static void main(String[] args) throws Exception { RandomAccessFile raf = new RandomAccessFile(new File("c:\\test.txt"), "rw"); FileChannel fc = raf.getChannel(); FileLock fl = fc.tryLock(); if (fl.isValid()) { System.out.println("get the lock!"); //测试线程 new Thread() { public void run() { while (true) { try { Thread.sleep(100); FileReader fr = new FileReader(new File("c:\\test.txt")); int c; while ( (c = fr.read()) != -1) { System.out.println( (char) c); } fr.close(); break; } catch (Exception e) { System.out.println(e); } } } }.start(); //模拟其它操作的耗时:比如用notepad打开无法修改。但是用程序来读写此文件都会异常 raf.write("kingfish(八百里秦川@龙城异客)".getBytes()); Thread.sleep(5000); fl.release(); System.out.println("release the lock!"); } raf.close(); } }

|