繁体   English   中英

java :OverlappingFileLockException

[英]java :OverlappingFileLockException

我想锁定文件,然后对其进行一些更新,但是每次我想进行此操作时,我都会遇到: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();
        } 

OverlappingFilelockException以大写字母开头。 您的catch语句无法编译,因为重叠文件锁异常(小写)未知。 纠正它,您的异常将按预期被捕获。

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

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

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

删除release()行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM