如何使用Java 9+从JDK模块中获取类的文件?
我正试图从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.toFile
或classFile.toAbsolutePath.toFile
时,我得到了一个UnsupportedOperationException
,我想这是因为它不是一个物理文件。但是,我需要一个File
对象变成一个InputStream
并进行读取。如何为某个模块(或每个模块)中作为JDK一部分的每个类文件获取File
对象
# 1 楼答案
创建} 一起使用:
InputStream
不一定需要File
。您还可以将Path
与^{