文件锁java
㈠ java文件锁为什么不起作用下面运行的时候该文件依然能被打开阿
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();
}
}
}
㈡ java 怎么下载文件锁
我用i908一年了没听说有!
㈢ 请问有谁知道S40第5版文件锁在哪儿可以下是6500s机型java平台,谢谢
不需要文件锁,有键盘锁,把键盘锁打开就可以了~
㈣ Java中如果几个进程同时写一个文件,加锁后,其他进程会放弃,还是等着
假如你说进程对某个文件加锁了,那其他进程怎么做取决于你写的程序
假如你说线程的话那就是等着
程序员当然要做事情了,要用到synchronized关键字进行同步,小心产生死锁,你去搜索下用法
㈤ java中文件加锁机制是怎么实现的。
Java中文件加锁机制如下:
在对文件操作过程中,有时候需要对文件进行加锁操作,防止其他线程访问该文件。对文件的加锁方法有两种:
第一种方法:使用RandomAccessFile类操作文件。
在java.io.RandomAccessFile类的open方法,提供了参数实现独占的方式打开文件:
RandomAccessFile raf = new RandomAccessFile(file, "rws");
其中的“rws”参数,rw代表读取和写入,s代表了同步方式,也就是同步锁。这种方式打开的文件,就是独占方式的。
第二种方法:使用sun.nio.FileChannel对文件进行加锁。
代码:
RandomAccessFile raf = new RandomAccessFile("file.txt", "rw");
FileChannel fc = raf.getChannel();
FileLock fl = fc.tryLock();
if(fl.isValid())
System.out.println("You have got the file lock.");
以上是通过RandomAccessFile来获得文件锁的,方法如下:
代码:
FileOutputStream fos = new FileOutputStream("file.txt");
FileChannel fc = fos.getChannel(); //获取FileChannel对象
FileLock fl = fc.tryLock(); //or fc.lock();
if(null != fl)
System.out.println("You have got file lock.");
//TODO write content to file
//TODO write end, should release this lock
fl.release(); //释放文件锁
fos.close; //关闭文件写操作
如果在读文件操作的时候,对文件进行加锁,操作过程如下:
FileChannel也可以从FileInputStream中直接获得,但是这种直接获得FileChannel的对象直接去操作FileLock会报异常NonWritableChannelException,需要自己去实现getChannel方法,代码如下:
private static FileChannel getChannel(FileInputStream fin, FileDescriptor fd) {
FileChannel channel = null;
synchronized(fin){
channel = FileChannelImpl.open(fd, true, true, fin);
return channel;
}
}
其实,看FileInputStream时,发现getChannel方法与我们写的代码只有一个地方不同,即open方法的第三个参数不同,如果设置为false,就不能锁住文件了。缺省的getChannel方法,就是false,因此,不能锁住文件。
㈥ java如何使文件不能被删除
两个文件同时损坏或被删除的情况,从代码流程分析看貌似不可能。所以问题原因不明。
肯定是代码原因
建议删除主文件时候判断备份文件是否存在,不存在备份后再删除
备份文件类似
㈦ java 文件锁类对象空指针异常
第12行获得锁失败,lock为null,为什么为null我的看法是:getLock方法是请求获得互斥锁,而你当前内eclipse打开这个文容件,是持有这个文件的锁的;
解决方法,不要读一个正在被其它程序操作的文件
//有点小建议,下次问这种题可以贴上代码
㈧ java文件锁问题
使用while判断是因为这里涉及到了多线程,如果使用if循环,第一个线程判断成功内正要执行if块中的代码时,第二个容线程启动了,改变了一个变量,使if语句不成立了,这时第一个线程醒了,执行if块中的代码时肯定出错,这里使用while用来循环判断,更加安全。
read(tom,0,10)这里指从数组下标0的位置开始,读到下标为10处,没有什么特殊含义的.
㈨ java:File的delete和deleteOnExit对于文件锁FileLock的关系
您好,提问者:
deleteOnExit()方法是虚拟机终止时才进行删除。
delete()方法就是普通的删除。
如果内你的这个RandomAccessFile打开的状态,肯定是容删除不掉的。
可以尝试删除之前先将文件从内存中关闭。
㈩ java上文件锁之后能不能对该文件进行读写
我来告诉你吧,你的文件如果是共享文件的话,改变啦文件的只读属性,其他进程是不能读的,但如果你是本地就不一定阿里