2017-10-16 64 views
-1

我想鎖定文件,然後對其進行一些更新,但每次我想要做這個操作時,我得到:java.nio.channels.overlappingFilelockException,我試圖添加這個異常的catch子句與這個和平的代碼:java:OverlappingFileLockException

catch(OverlappingFilelockException e){ 
lock.relese(); 
} 

但這不適用於我。這裏是我的java代碼,我該怎麼做才能擺脫這種異常?

 File file = new File("C://Users//user//Desktop//conf1.xml"); 
     String content = ''; 
     BufferedReader s; 
     BufferedWriter w; 
     RandomAccessFile ini=new RandomAccessFile(file, "rwd");; 
     FileLock lock= ini.getChannel().tryLock();; 
     def flowFile1=session.create(); 

     DocumentBuilder dBuilder = null; 
     Document doc=null; 
     String start, startDate, endDate, runAs, makeVersion, patch; 
     try { 

      String sCurrentLine; 
      s = new BufferedReader(Channels.newReader(ini.getChannel(), "UTF-8")); 


      while ((sCurrentLine = s.readLine()) != null) { 
       content += sCurrentLine; 
      } 
      ini.seek(0); 




      TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
      Transformer transformer = transformerFactory.newTransformer(); 
      DOMSource source = new DOMSource(doc); 
      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
      StreamResult result1 = new StreamResult(bos); 
      try { 
       transformer.transform(source, result1); 
      } catch (TransformerException e) { 
       e.printStackTrace(); 
      } 
      byte[] array = bos.toByteArray(); 
      String data = bos.toString(); 
      if (!data.isEmpty()) { 
       ini.setLength(0); 
       w = new BufferedWriter(Channels.newWriter(ini.getChannel(), "UTF-8")); 
       w.write(data); 
       lock.release(); 
       w.close(); 



      } 



     }catch (FileNotFoundException e) { 
      Thread.sleep(5000); 


     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     finally { 



      lock.release(); 
      ini.close(); 
     } 
+1

請將您的代碼歸結爲最小,完整和可驗證的示例。我不認爲xml遊戲與java.nio錯誤有關。 – Heri

+0

'這對我不起作用'不是問題描述。 – EJP

回答

0
catch (OverlappingFileLockException e) { 
    lock.release(); 
} 

什麼鎖?你沒有鎖定。你有個例外。而不是鎖。您甚至沒有lock變量,因爲它不在範圍內。

刪除release()行。

+0

您的意思是刪除lock.release()? –

+0

是的,顯然。 – EJP

0

OverlappingFilelockException以大寫字母開頭。您的catch語句不會編譯,因爲overlappingFilelockException(小寫)未知。糾正它,你的例外將被如預期捕獲。

由於某些其他進程/線程在文件上存在鎖,所以很可能會引發文件鎖異常。找出可能是誰,釋放鎖持有人的鎖,然後重試。

+0

這不是我的原始代碼中的大寫字母 –

+1

那麼您的意思是「這不適合我」? – Heri

+0

它不能防止trowing excpetion –