java文件鎖
❶ java如何使文件不能被刪除
兩個文件同時損壞或被刪除的情況,從代碼流程分析看貌似不可能。所以問題原因不明。
肯定是代碼原因
建議刪除主文件時候判斷備份文件是否存在,不存在備份後再刪除
備份文件類似
❷ Java中如果幾個進程同時寫一個文件,加鎖後,其他進程會放棄,還是等著
如果你確定你寫的是進程而不是線程的話,放棄還是等著就取決於代碼了。如果操作加鎖文件會拋出io異常,如果捕捉到異常catch塊里放棄那就放棄了,如果捕捉到異常後在catch塊里一直重新嘗試再次操作就是等著了
❸ 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 在獲取文件的時候,如何避免獲取到正在讀寫的文件
加入
try{}catch{}語句
❻ java.nio.channels.overlappingfilelockexception 怎麼解決
可能是環境變數配置錯誤,接下來就來介紹解決辦法。
❼ 在java中,createnewfile方法是做什麼的什麼時候用,謝謝大神
方法自動創建此抽象路徑名的新文件。文件鎖設備應該使用這種方法,文件鎖定會導致協議無法進行可靠地工作。1.聲明以下是createNewFile()方法的聲明:public boolean createNewFile()2.參數NA3.返回值此方法返回true,如果指定的文件不存在,並已成功創建。如果該文件存在,該方法返回false。4.異常IOException -- 如果發生I/ O錯誤SecurityException --如果SecurityManager.checkWrite(java.lang.String) 方法拒絕寫入許可權的文件5.例子下面的示例演示createNewFile()方法的用法。package com.yii;import java.io.File;public class FileDemo {public static void main(String[] args) {File f = null;boolean bool = false;try{// create new filef = new File("test.txt");// tries to create new file in the systembool = f.createNewFile();// printsSystem.out.println("File created: "+bool);// deletes file from the systemf.delete();// delete() is invokedSystem.out.println("delete() method is invoked");// tries to create new file in the systembool = f.createNewFile();// printSystem.out.println("File created: "+bool);}catch(Exception e){e.printStackTrace();}}}
❽ java:File的delete和deleteOnExit對於文件鎖FileLock的關系
您好,提問者:
deleteOnExit()方法是虛擬機終止時才進行刪除。
delete()方法就是普通的刪除。
如果你的這個RandomAccessFile打開的狀態,肯定是刪除不掉的。
可以嘗試刪除之前先將文件從內存中關閉。