async-file工具提供Java异步读写文件能力,使用Java NIO 库开发。Java应用程序引入框架可以简单的,异步和非阻塞的读写文件。框架包含三个工具类:
- AIOFileReader:异步读取文件,使用Java NIO库 AsynchronousFileChannel 和 CompletionHandler 实现。
- AIOFileWriter:异步写入文件,使用Java NIO库 AsynchronousFileChannel 和 CompletionHandler 实现。
- NIOFileLineReader:非阻塞读取文件,使用 ForkJoinPool 和 BufferedReader 实现
提示:Java提供的 Files 文件读取功能是阻塞的。
安装教程
首先,如果项目使用Maven工具,在项目的pom.xml文件中添加依赖
<dependency>
<groupId>io.github.kavahub</groupId>
<artifactId>kava-async-file</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
如果是Gradle项目,需要添加依赖:
implementation 'io.github.kavahub:kava-async-file:1.0.0.RELEASE'
AIOFileReader使用说明
AIOFileReader方法列表:
- Query<byte[]> bytes(Path file) : 读取文件,返回文件数据字节数组,读取的大小有默认缓冲区决定。
- Query<byte[]> allBytes(Path file) : 读取文件,返回文件所有数据字节数组。每次按默认缓冲区读取文件,完成后合并。
- Query<String> line(Path file) : 读取文件,返回文件行字符串。每次按默认缓冲区读取文件数据字节数组,按换行符分割字节数组。
- Query<String> allLines(Path file) : 读取文件,返回文件所有数据字符串。每次按默认缓冲区读取文件数据字节数组,合并后转换成字符串。
提示:默认缓冲区大小定义
public static final int BUFFER_SIZE = 4096 * 4;
示例:
// 按行读取文件,并输出到控制台
final Path FILE = Paths.get("src", "test", "resources", "fileWithmanyOfLine.txt");
AIOFileReader.line(FILE).subscribe((data, err) -> {
if (err != null) {
// 处理异常,如记录日志
err.printStackTrace();
}
if (data != null) {
// 文件行处理,如输出到控制台
System.out.println(data);
}
})
// 等待所有行处理完成
.join();
<