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.ioimport 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打开这个文件,是持有这个文件的锁的;解决方法,不要读一个正在被其它程序 *** 作的文件
//有点小建议,下次问这种题可以贴上代码
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)