上面的答案明显是错的,synchronized 只能在同一个JVM进程内,保证只有一个线程或者方法去 *** 作那个文件,无法保证,在同一个 *** 作系统的范围内,没有别的进程去 *** 作这个文件。去网上搜索了下,没有找到想要的答案。看老余到一个勉强满足的,网页链接 ,可以去看下。卖首说下我的理解,一份在磁盘上的文件,会映射到 *** 作系中含数统里面, *** 作系统里面的文件,由不同的进程共享,在 *** 作系统的层次上,应该有 判断文件是否被占用的API,java里面为什么没有,就不得而知了
可以在使用该文件前灶带简加文件锁 删除时判断是隐裤否文件被锁住RandomAccessFile input=new RandomAccessFile("a.java","rw")
FileChannel channel=input.getChannel()
FileLock lock=channel.tryLock()
如行游果在windows *** 作系统下 只能通过jni调用相关dll
File file=new File("test.avi")if(file.renameTo(file)){
System.out.println("文件未被 *** 基游燃作")
}else{
System.out.println("文件正在被 *** 磨世作搏虚")
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)