Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 扫描JAR中的文件夹_Java_Jar_Uri_Inputstream_Relative Path - Fatal编程技术网

Java 扫描JAR中的文件夹

Java 扫描JAR中的文件夹,java,jar,uri,inputstream,relative-path,Java,Jar,Uri,Inputstream,Relative Path,很多类似的问题都被问过,但在我不得不自己问这个问题之前,我只能承受这么多的痛苦 无论如何,我在jar file/input中有文件,我需要读取该文件夹中文件名的列表,然后读取文件本身 尝试1: String path Main.class.getProtectionDomain().getCodeSource().getLocation().getPath(); // "/Applications/company/extensions/components/Box/Box/Box.jar" St

很多类似的问题都被问过,但在我不得不自己问这个问题之前,我只能承受这么多的痛苦

无论如何,我在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)
其间的其他各种尝试也有相同的结果。我根本无法读取那个罐子里的文件夹


有人知道如何解决这个问题吗?

也许我误解了你的问题,但是。。。 是否考虑使用java.util.jar包

以下是一个例子:


希望这有帮助

也许我误解了你的问题,但是。。。 是否考虑使用java.util.jar包

以下是一个例子:

希望这有助于

依照


在我不得不自己问这个问题之前,我可以承受这么多的痛苦。您要花多少时间才能概括出对该功能的非凡需求?填补这一特殊需求,可能会有更好的战略来实现这一目标。我怀疑所有其他线程都没有得到好的答案,因为OP过于关注他们试图做什么,而不是他们试图实现什么。顺便说一句,谁构建了Jar?一旦部署,程序就无法重新编译,因此它必须根据触发读取此文件夹中文件的事件进行动态更改。到目前为止,疼痛=2小时。我正在尝试已经发布的内容,但还没有能够得到任何工作。我构建了jar**我刚刚读到你不能在运行时修改jar,因此我的问题没有意义。我想我只是要远程存储文件,并通过HTTP调用读取它们。除非有人有更好的主意?在我不得不自己问这个问题之前,我可以承受这么多的痛苦。您要花多少时间才能概括出对该功能的非凡需求?填补这一特殊需求,可能会有更好的战略来实现这一目标。我怀疑所有其他线程都没有得到好的答案,因为OP过于关注他们试图做什么,而不是他们试图实现什么。顺便说一句,谁构建了Jar?一旦部署,程序就无法重新编译,因此它必须根据触发读取此文件夹中文件的事件进行动态更改。到目前为止,疼痛=2小时。我正在尝试已经发布的内容,但还没有能够得到任何工作。我构建了jar**我刚刚读到你不能在运行时修改jar,因此我的问题没有意义。我想我只是要远程存储文件,并通过HTTP调用读取它们。除非有人有更好的主意?
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. */
  ...
}