API 参考
EpubFileReader
EpubFileReader 是专门负责读取 EPUB 文件内容的类,遵循单一职责原则,提供安全的文件读取功能。
构造函数
java
public EpubFileReader(File epubFile)创建文件读取器实例。
参数:
epubFile: EPUB 文件对象
抛出:
IllegalArgumentException: 如果文件参数为 null
文件读取方法
readContent()
java
public String readContent(String path) throws EpubZipException, EpubPathValidationException读取 EPUB 文件中指定路径的内容。
参数:
path: 文件路径
返回:
String: 文件内容
抛出:
EpubZipException: ZIP 文件读取异常EpubPathValidationException: 路径验证异常
processHtmlChapterContent()
java
public void processHtmlChapterContent(String htmlFileName, Consumer<InputStream> processor)
throws EpubZipException, EpubPathValidationException流式处理 HTML 章节内容。
参数:
htmlFileName: HTML 文件名processor: 内容处理器,接收 InputStream
抛出:
EpubZipException: ZIP 文件处理异常EpubPathValidationException: 路径验证异常
processMultipleHtmlChapters()
java
public void processMultipleHtmlChapters(List<String> htmlFileNames,
BiConsumer<String, InputStream> processor)
throws EpubZipException, EpubPathValidationException流式处理多个 HTML 章节内容。
参数:
htmlFileNames: HTML 文件名列表processor: 内容处理器,接收文件名和 InputStream
抛出:
EpubZipException: ZIP 文件处理异常EpubPathValidationException: 路径验证异常
安全特性
- 路径验证: 自动验证文件路径,防止目录遍历攻击
- ZIP 安全: 使用安全的 ZIP 文件处理机制
- 异常处理: 提供详细的异常信息用于调试
使用示例
java
File epubFile = new File("book.epub");
EpubFileReader reader = new EpubFileReader(epubFile);
// 读取文本内容
try {
String mimetype = reader.readContent("mimetype");
System.out.println("MIME 类型: " + mimetype);
String container = reader.readContent("META-INF/container.xml");
System.out.println("容器内容: " + container);
} catch (EpubZipException | EpubPathValidationException e) {
System.err.println("读取文件失败: " + e.getMessage());
}
// 流式处理 HTML 内容
reader.processHtmlChapterContent("chapter1.xhtml", inputStream -> {
try (BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))) {
String line;
while ((line = br.readLine()) != null) {
// 处理每一行
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
});
// 批量处理多个文件
List<String> files = Arrays.asList("chapter1.xhtml", "chapter2.xhtml");
reader.processMultipleHtmlChapters(files, (fileName, inputStream) -> {
System.out.println("处理文件: " + fileName);
// 处理文件内容
});注意事项
- 所有路径都会经过安全验证
- InputStream 在处理器执行完毕后自动关闭
- 支持 ZIP 文件中的所有压缩格式
- 提供详细的错误信息用于问题诊断