注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

古城风~~~

竹密无妨溪水过,天高不碍白云飞。这天下总有一份是属于我古城的天地!

 
 
 

日志

 
 

文件流中的文件锁  

2008-09-07 18:10:46|  分类: java/jsp |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

虽然用线程的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();
  }
  
 }

}

 

看完此代码我相信已经不用再多说了~~~~~~~~~~~~~~~~~~~~~

  评论这张
 
阅读(444)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017