java:OverlappingFileLockException

java:OverlappingFileLockException

问题描述:

我想锁定文件,然后对其进行一些更新,但每次我想要做这个操作时,我得到: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

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

什么锁?你没有锁定。你有个例外。而不是锁。您甚至没有lock变量,因为它不在范围内。

删除release()行。

+0

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

+0

是的,显然。 – EJP

OverlappingFilelockException以大写字母开头。您的catch语句不会编译,因为overlappingFilelockException(小写)未知。纠正它,你的例外将被如预期捕获。

由于某些其他进程/线程在文件上存在锁,所以很可能会引发文件锁异常。找出可能是谁,释放锁持有人的锁,然后重试。

+0

这不是我的原始代码中的大写字母 –

+1

那么您的意思是“这不适合我”? – Heri

+0

它不能防止trowing excpetion –