gpt4 book ai didi

java - 我可以使用 FileReader 读取包含图像和视频(例如 epub 文件)和文本的文件吗?在性能方面是否建议这样做?

转载 作者:行者123 更新时间:2023-11-30 03:08:10 26 4
gpt4 key购买 nike

我需要解析 epub 文件的内容,我想看看什么是最有效的方法。 epub 文件可能包含图像、大量文本,有时还包含视频。我应该选择 FileInputStream 还是 FileReader?

最佳答案

由于 epub 使用 ZIP 存档结构,我建议这样处理它。下面找到一个小片段,其中列出了 epub 文件的内容。

Map<String, String> env = new HashMap<>();
env.put("create", "true");

Path path = Paths.get("foobar.epub");
URI uri = URI.create("jar:" + path.toUri());
FileSystem zipFs = FileSystems.newFileSystem(uri, env);
Path root = zipFs.getPath("/");
Files.walkFileTree(root, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file,
BasicFileAttributes attrs) throws IOException {
print(file);
return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult preVisitDirectory(Path dir,
BasicFileAttributes attrs) throws IOException {
print(dir);
return FileVisitResult.CONTINUE;
}

private void print(Path file) throws IOException {
Date lastModifiedTime = new Date(Files.getLastModifiedTime(file).toMillis());
System.out.printf("%td.%<tm.%<tY %<tH:%<tM:%<tS %9d %s\n",
lastModifiedTime, Files.size(file), file);
}
});

示例输出

01.01.1970 00:59:59         0 /META-INF/
11.02.2015 16:33:44 244 /META-INF/container.xml
11.02.2015 16:33:44 3437 /logo.jpg
...

编辑如果您只想根据文件名提取文件,您可以像 visitFile(...) 方法的代码片段中所示那样进行操作。

public FileVisitResult visitFile(Path file,
BasicFileAttributes attrs) throws IOException {
// if the filename inside the epub end with "*logo.jpg"
if (file.endsWith("logo.jpg")) {
// extract the file in directory /tmp/
Files.copy(file, Paths.get("/tmp/",
file.getFileName().toString()));
}
return FileVisitResult.CONTINUE;
}

根据您想要如何处理 epub 中的文件,您还可以查看 ZipInputStream

try (ZipInputStream in = new ZipInputStream(new FileInputStream("foobar.epub"))) {
for (ZipEntry entry = in.getNextEntry(); entry != null;
entry = in.getNextEntry()) {
System.out.printf("%td.%<tm.%<tY %<tH:%<tM:%<tS %9d %s\n",
new Date(entry.getTime()), entry.getSize(), entry.getName());
if (entry.getName().endsWith("logo.jpg")) {
try (FileOutputStream out = new FileOutputStream(entry.getName())) {
// process the file
}
}
}
}

示例输出

11.02.2013 16:33:44       244 META-INF/container.xml
11.02.2013 16:33:44 3437 logo.jpg

关于java - 我可以使用 FileReader 读取包含图像和视频(例如 epub 文件)和文本的文件吗?在性能方面是否建议这样做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34226668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com