gpt4 book ai didi

java - 如何使用 Java 9+ 从 JDK 模块获取类的文件?

转载 作者:行者123 更新时间:2023-12-05 09:32:58 24 4
gpt4 key购买 nike

我正在尝试从 java.base 中读取类作为 InputStream。我已经有一个方法来读取给定 File 对象的类文件,但我无法获得 File 对象,因为我使用的是 JDK 11 并且没有 rt.jar 文件了。关注this后答案,我大致有以下代码(我使用的是 Scala,但这本质上是一个关于 Java 的问题,因此有标签):

val fs = FileSystems.newFileSystem(URI.create("jrt:/"), Collections.emptyMap, loader)

Files.list(fs.getPath("/modules")).forEach { mdl =>
Files.walk(mdl).forEach { (classFile: Path) =>
val asFile = classFile.toAbsolutePath.toFile //Here's where I get an exception
//do stuff with that
}
}

不幸的是,当我使用 classFile.toFileclassFile.toAbsolutePath.toFile 时,我得到一个 UnsupportedOperationException,我猜这是因为它是不是物理文件。但是,我需要将一个 File 对象转换为一个 InputStream 并读取。如何为 JDK 的某个模块(或每个模块)中的每个类文件获取 File 对象?

最佳答案

您不一定需要 File 来创建 InputStream。您还可以将 PathFiles::newInputStream 一起使用:

Files.list(fs.getPath("/modules")).forEach(mdl -> {
try(Stream<Path> stream = Files.walk(mdl)) {
stream.forEach(classFile -> {
try (InputStream input = Files.newInputStream(classFile)) {
...
} catch(IOException e) {
...
}
});
} catch(IOException e) {
...
}
});

关于java - 如何使用 Java 9+ 从 JDK 模块获取类的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67610154/

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