文件鎖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上文件鎖之後能不能對該文件進行讀寫
我來告訴你吧,你的文件如果是共享文件的話,改變啦文件的只讀屬性,其他進程是不能讀的,但如果你是本地就不一定阿里