我正在尝试从java.baseas 中读取类InputStream。我已经有一种方法可以读取给定File对象的类文件,但是我无法获取File对象,因为我使用的是 JDK 11 并且不再有rt.jar文件了。按照这个答案之后,我大致有以下代码(我使用的是 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
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我使用classFile.toFileor 时classFile.toAbsolutePath.toFile,我得到一个UnsupportedOperationException,我猜这是因为它不是物理文件。但是,我需要一个File对象变成一个InputStream并读取。如何获取File属于 JDK 的某个模块(或每个模块)中每个类文件的对象?
您不一定需要 aFile来创建InputStream. 您还可以将 aPath与 一起使用Files::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) {
...
}
});
Run Code Online (Sandbox Code Playgroud)