Prevent file channel from closing after reading xml file

前端 未结 2 1318
春和景丽
春和景丽 2020-12-22 05:08

For more detailed information regarding the motivation behind this goal (and my efforts to solve it) view my previous question. I decided to ask this as a new question entir

2条回答
  •  囚心锁ツ
    2020-12-22 05:19

    One clean way to do this is to create a FilterInputStream and override the close to do nothing:

    public Test() {
        try {
            channel = new RandomAccessFile(new File(path), "rw").getChannel();
            dbFactory = DocumentBuilderFactory.newInstance();
            dBuilder = dbFactory.newDocumentBuilder();
    
            System.out.println(channel.isOpen());
            NonClosingInputStream ncis = new NonClosingInputStream(Channels.newInputStream(channel));
            doc = dBuilder.parse(ncis);
            System.out.println(channel.isOpen());
            // Closes here.
            ncis.reallyClose();
            channel.close(); //Redundant
        } catch (IOException | ParserConfigurationException | SAXException e) {
            e.printStackTrace();
        }
    }
    
    class NonClosingInputStream extends FilterInputStream {
    
        public NonClosingInputStream(InputStream it) {
            super(it);
        }
    
        @Override
        public void close() throws IOException {
            // Do nothing.
        }
    
        public void reallyClose() throws IOException {
            // Actually close.
            in.close();
        }
    }
    

提交回复
热议问题