根据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
写文件。但是如何
将频道传递给处理程序真的让我很困惑。我应该将其作为处理程序的附件传递吗?任何人都可以提供示例代码吗?
答案 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);