论坛首页 Java企业应用论坛

对文件加锁应怎样解决呢?

浏览 7427 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-11-12  

   对文件加锁应怎样解决呢?

           目的: 对文件读写时进行异步化、

                              我只对一个文件进行 读、写、清空、操作;进行异步化

                              实现的步骤顺序是:

                                  《1》、随时对文件进行写操作

                                  《2》、一分钟后去读取这个文件的内容、然后再清空内容、

                                  《3》、就这么一直循环的走。

                                   《4》、在以上《1、2》步骤之间都包含对文件进行加锁。

               恩、我遇到的问题是:

                                    《1》、如果在读取文件的时候、刚读取完、这时对文件进行了解锁、解锁后另一个文件对象就可以

                                操作这个文件了、      偏偏在这时对文件进行了写、然而在读完后的这个方法中却要清空这个文件的内容、

                               这样一来数据就不完整了不是。这是我的一个难题啊、请大家仔细看看我的说明、然后给我一个答案谢谢。

            请大家吧、给我一个好的解决方案!!!

 

   发表时间:2007-11-12  
> 在读取文件的时候、刚读取完、这时对文件进行了解锁
> 然而在读完后的这个方法中却要清空这个文件的内容

所以,应当是清空这个文件的内容后,再解锁
0 请登录后投票
   发表时间:2007-11-12  
恩、你这个思路我懂、但是这时已对文件进行了加锁、如果在解锁之前在创建一个文件对象执行的话回报错的
   错误信息:另一个程序已锁定文件的一部分,进程无法访问。

   但是如果用当前这个对象的话我不知道因怎样清空这个文件
  
如下是我使用的方法写的:
public String setAttribute(String key, String value) {

FileLock flock = null;
String oldValue = null;
FileChannel lockfc = null;
RandomAccessFile fis = null;
try {
// 打开一个临时的文件,注意同一共享内存,该文件名要相同。
fis = new RandomAccessFile(filename, "rw");
// 获得文件通道
lockfc = fis.getChannel();
// 获得文件的独占锁,若文件已被人锁定,则一直等待
flock = lockfc.lock();
oldValue = (String) recTreeMap.put(key, value);//recTreeMap对象是一个全局TreeMap对象
// set the file point to the beginning of the file
lockfc.position(0);
ObjectOutputStream out;
out = new ObjectOutputStream(Channels.newOutputStream(channel));
out.writeObject(recTreeMap);
out.close();
} catch (IOException ee) {
ee.printStackTrace();
} finally {
// if flock is not null, we should release it
try {
if (flock != null)
if (flock.isValid()) {
flock.release();
}
if (lockfc != null)
lockfc.close();
if (fis != null)
fis.close();

} catch (ClosedChannelException o) {
o.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception er) {
er.printStackTrace();
}
}
}
我是这样写进去的:但是在读的时候也是使用相同的方法进行读的。
就是在读的时候怎样使用当前的对象进行清空这个文件中的内容。
0 请登录后投票
   发表时间:2007-11-12  
象Eclipse或者lucene一样,使用.lock文件
0 请登录后投票
   发表时间:2007-11-12  
   上面那位大哥你说的是什么意思啊!!!

    小弟看不懂啊!!!
   
   能不能详细一点阿!!!
0 请登录后投票
   发表时间:2007-11-12  
他是说,用其他的文件作为锁使用。自己实现锁机制
0 请登录后投票
   发表时间:2007-11-12  
   恩、我还是不会啊、你就在详细一点吧、举一个例子如何呢?
0 请登录后投票
   发表时间:2007-11-12  
某个线程读取的时候,生成一个以.lock结尾的文件,其他要读时,先判断是否存在这lock文件
0 请登录后投票
   发表时间:2007-11-12  
  恩、ok、我明白了。
0 请登录后投票
   发表时间:2007-11-13  
千万不要忘记删除,否则你就死了
可以参考Lucene的代码
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics