虽然用线程的synchronized方法也可以达到封锁的效果,但很多情况都会增强了程序的复杂性;现在介绍一种简单的类---- java.nio.channels.FileLockjava.nio.channels.FileChannel;
java.io.FileInputStream,java.io.RandomAccessFile等类中都有一个可以得到FileChannel类(用于读取、写入、映射和操作文件的通道。 )的方法叫getChannel()(即public final FileChannel getChannel()),而FileChannel类下又有一个可以得到FileLock类(表示文件区域锁定的标记 )的方法叫tryLock()(即public final FileLock tryLock() throws IOException);现在把它们串起来,你大概想到怎样用文件锁了吧。。下面来看看我写的一个小程序,重点说明文件锁的用法。
 
package ccp330.gucheng.io;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
public class FileLockTest {
 public static void main(String[] args) {
  File fdir=new File("D:/gucheng.txt");
  try {
   RandomAccessFile ranStream=new RandomAccessFile(fdir, "rw");
   FileChannel channel=ranStream.getChannel();
   FileLock lock=channel.tryLock();
   String str=null;
   while( ( str=( ranStream.readLine() ) ) != null){
    str= new String(str.getBytes("ISO-8859-1"),"gb2312"); //此行用于处理双字节字符(例如:中文),单字节的字符可以不写。
    System.out.println(str);
    try {
     Thread.sleep(5000);
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
   }
   lock.release();
   ranStream.close();
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  
 }
}
 
看完此代码我相信已经不用再多说了~~~~~~~~~~~~~~~~~~~~~