2017-06-15 56 views
2

我在Java中編寫的代碼是關閉用戶打開的文件。因此,通常會發生以下情況:用戶正在編輯Excel文件,將其保存,將其保持打開狀態,然後關閉筆記本電腦上的蓋子。該文件仍然保持打開並鎖定,以便其他人無法編輯它。有沒有辦法將它們踢掉並解鎖文件?當他們使用該文件時,它被「檢出」。這裏顯示的內容:解鎖由Excel,Word或任何程序打開的文件

What checked out looks like: (image)

下面的代碼,通過WinDAV與SharePoint接口,告訴我,如果一個文件被鎖定或沒有(我知道這是不是很大的代碼,但它的作品,我已經試過其他幾種解決方案,包括文件鎖,Apache的IO文件流等):

String fileName = String.valueOf(node); 
     File file = new File(fileName); 
     boolean replaced; 

     File sameFileName = new File(fileName); 

     if(file.renameTo(new File(sameFileName + "_UNLOCK"))){ 
      replaced = true; //file is currently not in use 
      (new File(sameFileName + "_UNLOCK")).renameTo(sameFileName); 
     }else{ 
      replaced = false; //file is currently in use 
     } 

那麼,如何將我現在解鎖文件?唯一的另一個解決方案是使用SharePoint庫的PowerShell,但是它有很多其他問題...

+0

您需要確定鎖定文件並終止該進程的進程。爲了找到這個過程,我只知道一些gui選項(比如sysinternals的進程管理器),你可以查找任何cli選項,它們會執行相同的操作。 –

+0

我會研究一下。我添加了一張圖片,所以你認爲你可以看看,並告訴我你的想法?該文件被SharePoint鎖定,所以我不能真正殺死SharePoint,除非我想每個人都抱怨。會有其他方法嗎?就像創建文件的副本並刪除正在使用的文件一樣? –

回答

1

根據post,您可以使用工具Handle,這是一個CLI工具來找出哪個進程正在鎖定文件。一旦擁有進程ID,就可以終止該進程。我不知道任何可識別罪魁禍首進程的Java API。爲了消除這個過程,你可以使用taskkill,你可以使用Runtime來調用它,比如this。這兩項操作都要求您的應用程序以Administrator或更高權限運行。

+0

謝謝!好吧,如果我運行Handle並獲取流程,那麼您是否知道Java中的一種方式來殺死所述進程? –

+0

你可以做一些類似於這篇文章中提到的東西https://stackoverflow.com/a/11366828/3981536 –

+1

好吧,我會馬上開始!非常感謝你,RedFlar3!如果這不起作用,我也有一個(確實非常混亂)的方式,希望你能提供你的意見?如果文件被鎖定,我可以複製文件並刪除原件。副本上有鎖,並具有所有相同的參數。而且這也很簡單。如果Handle方法不起作用,您如何看待這種方法? –

相關問題