2017-10-16 1 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은 대문자로 시작됩니다. overlappingFilelockException (소문자)을 알 수 없으므로 catch 문이 컴파일되지 않습니다. 그것을 정정하면 예상대로 예외가 잡힐 것입니다.

다른 프로세스/스레드가 파일을 잠그기 때문에 파일 잠금 예외가 발생할 가능성이 큽니다. 이 사람이 누구인지 알아 내고 자물쇠로 자물쇠를 풀고 다시 시도하십시오.

+0

원래 코드에 대문자가있는 경우가 아닙니다. –

+1

"내게는 효과가 없습니다"라는 의미는 무엇입니까? – Heri

+0

troping excpetion을 방지 할 수 없습니다 –