2013-05-28 73 views
-1

我想寫入文件,該文件已被其他進程使用。寫入已經使用的文件

我的問題是:有沒有辦法避免FilenotfoundException,並寫入文件,雖然它正在使用?

謝謝!

+1

東西不管是不是你可以寫在另一個進程使用的文件是不是一個真正的Java的問題,但與底層操作系統做。 – Keppil

+2

發佈您的代碼和確切的錯誤消息。如果該文件存在,則不應該遇到'FileNotFoundException'。 – jlordo

+0

爲什麼你在兩個進程中使用同一個文件?我敢打賭,有一個更好的方法來做到這一點。 –

回答

0

Oracle docs,做以下檢查:

布爾canWrite() - 返回true,如果一個文件是當前應用程序進行讀寫操作;否則爲假。

boolean canRead() - 如果文件可被當前應用程序讀取,則返回true;否則爲假。

如果您問是否可以在文件被其他應用程序使用時寫入文件,您可能可以強制執行該文件,但這取決於其他應用程序的行爲。

+0

是的,我的問題是,如果有辦法強制它,但謝謝你的答案! – user2429567

+0

我從來沒有使用過這個,但[** FileChannel **](http://openjdk.java.net/projects/nio/javadoc/java/nio/channels/FileChannel.html)可能是你需要的。這裏有一個很好的例子**(http://www.java2s.com/Code/Java/File-Input-Output/DemonstratesfilelockingandimplefilereadandwriteoperationsusingjavaniochannelsFileChannel.htm)。 – kgdesouz

0

如果其他進程在應用程序想要使用的文件上獲得lock,則必須確保應用程序等待特定時間,直到鎖定釋放。 locking mechanism完全取決於使用file的其他過程。 你可以試試這樣

FileInputStream fin = new FileInputStream("test.txt"); 
    FileChannel channel = fin.getChannel(); 
    FileLock lock = channel.tryLock(); 
    if (lock != null) { 
     try { 
      // read the file 
     } finally { 
      lock.release(); 
     } 
    } else { 
     // some other process has locked the file for some reason 
    }