2017-10-16 14 views
-1

Je veux verrouiller le fichier, puis faire des mises à jour, mais chaque fois que je veux faire cette opération j'ai eu: java.nio.channels.overlappingFilelockException, j'ai essayé d'ajouter la clause catch avec cette exception avec cette paix de code:java: OverlappingFileLockException

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

mais cela ne fonctionne pas pour moi. Voici mon code Java, que dois-je faire pour me débarrasser de cette exception?

 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

Veuillez réduire votre code à un exemple minimal, complet et vérifiable. Je ne pense pas que la procession xml a quelque chose à voir avec les erreurs java.nio. – Heri

+0

'Cela ne fonctionne pas pour moi' n'est pas une description du problème. – EJP

Répondre

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

Quel verrou? Tu n'as pas eu de verrou. Vous avez une exception. Au lieu d'un verrou. Vous n'avez même pas la lockvariable, parce que ce n'est pas dans la portée.

Supprimez la ligne release().

+0

Voulez-vous dire supprimer lock.release()? –

+0

Oui, évidemment. – EJP

0

OverlappingFilelockException commence par lettre majuscule. Votre instruction catch ne compile pas car le overlappingFilelockException (en minuscules) est inconnu. Corrigez-le et votre exception sera interceptée comme prévu.

Une exception de verrouillage de fichier est probablement émise car un autre processus/thread détient un verrou sur le fichier. Découvrez qui cela peut être, relâchez le verrou par le support du verrou et réessayez.

+0

Ce n'est pas le cas j'ai des majuscules dans mon code original –

+1

Alors, que voulez-vous dire par "cela ne fonctionne pas pour moi"? – Heri

+0

Il ne peut pas empêcher l'excpetion de trottoir –