已经提出了许多类似的问题,但在我不得不自己提出问题之前,我只能忍受很多痛苦。
无论如何,我在 jar file
/ input中有文件,我需要读取该文件夹中文件名的列表(稍后,自己阅读文件。)
尝试#1:
String path Main.class.getProtectionDomain().getCodeSource().getLocation().getPath();
// "/Applications/company/extensions/components/Box/Box/Box.jar"
String decoded = URLDecoder.decode(path, "UTF-8");
// "/Applications/company/extensions/components/Box/Box/Box.jar"
File[] files = (new File(decoded + "/input")).listFiles();
// files = null (bad)
尝试#2:
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL url = classLoader.getResource("input");
// url.file: "file:/Applications/company/extensions/components/Box/Box/Box.jar!/input"
// url.path: (ditto)
// url.protocol: "jar"
// url.host: ""
// url.query: null
// url.port: -1
java.net.URI uri = new java.net.URI(url.getProtocol(), url.getAuthority(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
// URISyntaxException --> "Relative path in absolute URI" (bad)
中间的其他杂项尝试具有相同的结果。我根本无法读取那个罐子里的文件夹...
有人知道如何解决这个问题吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
根据How do I list the files inside a JAR file?
CodeSource src = MyClass.class.getProtectionDomain().getCodeSource();
if (src != null) {
URL jar = src.getLocation();
ZipInputStream zip = new ZipInputStream(jar.openStream());
/* Now examine the ZIP file entries to find those you care about. */
...
}