如何关闭AsynchronousFileChannel

时间:2017-11-23 02:46:58

标签: java nio

根据AsynchronousChannel AsynchronousFileChannel实施的AsynchronousCloseException的API说明。

  

此通道上的任何未完成的异步操作都将以异常close()完成。

所以根据我的理解,关闭它的正确方法是将CompletionHandler的调用放在AsynchronousFileChannel.write中 传递给AsynchronousFileChannel,如果我打算通过$ mongo > use owndb > db.CollectionName.find(<query>) ### and then copy and paste the result on a text editor 写文件。但是如何 将频道传递给处理程序真的让我很困惑。我应该将其作为处理程序的附件传递吗?任何人都可以提供示例代码吗?

1 个答案:

答案 0 :(得分:0)

将频道对象作为附件传递

    Path path = Paths.get("hello_world.txt");
    path.toFile().createNewFile();

    AsynchronousFileChannel channel = AsynchronousFileChannel.open(path, StandardOpenOption.WRITE);
    channel.write(ByteBuffer.wrap("hello".getBytes()), 0, channel, new CompletionHandler<Integer, Closeable>() {
        @Override
        public void completed(Integer result, Closeable closeMe) {
            System.out.println("Written: " + result);
            try {
                closeMe.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void failed(Throwable exc, Closeable closeMe) {
            System.err.println("Error occurred: " + exc);
            try {
                closeMe.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

    //wait for async task to complete
    Thread.sleep(5000L);