Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java SE 综合讨论区 » 实战错误讨论  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 XML的同时读写,文件锁 问题
sesfei





发贴: 1
积分: 0
于 2008-08-29 11:58 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
近日在项目中遇到这样的问题,求大虾助战
【课题】:
2个不同的WEB项目,共用同一个XML文件。如果项目1先更新了XML,项目2取得最新的XML内容显示在页面上; 同样,如果项目2更新了XML,项目1取得最新的XML内容显示在页面上。
【实现】:
XML读操作,对XML文件锁FileLock,读完后文件锁解除。
XML写操作,对XML文件锁FileLock,读完后文件锁解除。
文件锁状态判断: 文件锁存在,该线程200毫秒Sleep,直到解锁后,读写操作才可进行。
【问题】:
XML读写操作之前,文件锁启用,但是XML文件读操作用编码器XMLDecoder,写操作用解码器XMLEncoder,在文件锁启用之后使用是,出错。
【代码】:

public class XMLUtil {
  /**
   * XML读操作
   */
public static Object xmlReader(String fileName) {
if (!new File(fileName).exists()) {
return null;
}
XMLDecoder decoder = null;
Object obj = null;
try {
// 文件锁
  FileLock lock = new RandomAccessFile(fileName, "rw").getChannel().tryLock();
  while (lock == null || (lock !=null && !lock.isValid())){
    Thread.sleep(200L);
    lock = new RandomAccessFile(fileName, "rw").getChannel().tryLock();
  }
FileInputStream fis = new FileInputStream(fileName);
BufferedInputStream bis = new BufferedInputStream(fis);
decoder = new XMLDecoder(bis);
obj = decoder.readObject(); //出错!!!
decoder.close();
bis.close();
fis.close();
// 文件锁
lock.release();
    } catch (IOException ioe) {
  System.out.println("err");
    } catch (InterruptedException e) {
  System.out.println("sleep err");
    } finally {
if (null != decoder) {
decoder.close();
}
}
    return obj;
}

  /**
   * XML写操作
   */
public static void xmlWriter(Object bean, String fileName) {
if (!new File(fileName).exists()) {
return;
}
XMLEncoder encoder = null;
try {
// 文件锁
  FileLock lock = new RandomAccessFile(fileName, "rw").getChannel().tryLock();
  while (lock == null || (lock !=null && !lock.isValid())){
    Thread.sleep(200L);
    lock = new RandomAccessFile(fileName, "rw").getChannel().tryLock();
  }
  FileOutputStream fos = new FileOutputStream(fileName);
BufferedOutputStream bos = new BufferedOutputStream(fos);
encoder = new XMLEncoder(bos);
encoder.writeObject(bean);
encoder.flush(); //出错!!!
encoder.close();
bos.close();
fos.close();
// 文件锁
lock.release();
} catch (IOException exc) {
  System.out.println("err");
    } catch (InterruptedException e) {
  System.out.println("sleep err");
} finally {
if (null != encoder) {
encoder.close();
}
}
}

}




话题树型展开
人气 标题 作者 字数 发贴时间
13265 XML的同时读写,文件锁 问题 sesfei 2749 2008-08-29 11:58
10345 Re:XML的同时读写,文件锁 问题 andy_wang_5 36 2008-09-01 09:03
11028 Re:XML的同时读写,文件锁 问题 JiafanZhou 89 2008-09-03 16:51

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923