java:OverlappingFileLockException

时间:2017-10-16 17:55:16

标签: java nio apache-nifi

我想锁定文件,然后对其进行一些更新,但每次我想要进行此操作时,我得到了:java.nio.channels.overlappingFilelockException,我试图用这个代码的代码添加带有此异常的catch子句:

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();
        } 

2 个答案:

答案 0 :(得分:0)

120以大写字母开头。您的OverlappingFilelockException语句无法编译,因为overlapFilelockException(小写)未知。纠正它,你的异常将按预期捕获。

最有可能抛出文件锁定异常,因为某些其他进程/线程对文件持有锁定。找出这个是谁,通过锁扣释放锁,然后再试一次。

答案 1 :(得分:0)

catch (OverlappingFileLockException e) {
    lock.release();
}
什么锁?你没有锁定。你有一个例外。而不是锁。您甚至没有lock 变量,因为它不在范围内。

删除release()行。