java XML文件加锁并实现读写 *** 作

java XML文件加锁并实现读写 *** 作,第1张

private boolean isLocked() {

try {// if the lock was null, anthor program was locking the file.

lock=new FileOutputStream(new File(lockPath)).getChannel().tryLock()

} catch (Exception e) {

return false

}

// do not close stream or file will be unlocked

return lock==null

}

package com.ruan.io

import java.io.BufferedReader

import java.io.FileInputStream

import java.io.FileOutputStream

import java.io.InputStreamReader

import java.nio.channels.FileLock

/**

* 文件加锁

* @author wangjian

*/

public class LockTester {

public static void main(String[] args) throws Exception{

//加上true参数,不会重新生成一个新的文件。

FileOutputStream fos = new FileOutputStream("d:/a.txt",true)

FileLock fl = fos.getChannel().tryLock()

new ReadLockedFile().start() //试图读取,不成功。

if(fl!=null){

System.err.println("文件已经锁定..")

System.err.println(fl.isShared())

Thread.sleep(1000*60) //锁定1分钟

fl.release() //解除锁定

System.err.println("解除锁定..")

}

}

}

/**

* 用另一个线程读取已经锁定的文件。

*/

class ReadLockedFile extends Thread{

public void run(){

try{

BufferedReader br =

new BufferedReader(new InputStreamReader(new FileInputStream("d:/a.txt")))

String str = br.readLine()

while(str!=null){

System.err.println(str)

str = br.readLine()

}

br.close()

}catch(Exception e){

e.printStackTrace()

}

}

}

第12行获得锁失败,lock为null,为什么为null我的看法是:getLock方法是请求获得互斥锁,而你当前eclipse打开这个文件,是持有这个文件的锁的;

解决方法,不要读一个正在被其它程序 *** 作的文件

//有点小建议,下次问这种题可以贴上代码


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/8118767.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存