java - 在多个环境中动态加载文件

标签 java classloader

所以我正在制作一个小应用程序。

目前,该项目运行良好。我正在通过 IDE 运行它。当尝试将项目作为 jar 运行时,问题就出现了——这就是最终结果。目前,它无法正确加载所需的文件(类和简单的 ASCII 文件)。

我使用的方法基于:

final Enumeration<URL> paths = CLASS_LOADER.getResources("");

其中CLASS_LOADERclass.getClassLoader()的实例。

<小时/>

这在不在 jar 里时效果很好。但在 jar 里,它似乎严重失败。例如,在上面的代码中,paths 将为空。

我假设错误是文件都在一个 jar 中 - 准确地说是同一个 jar。

list 文件的类路径目前为空。

<小时/>

如果有帮助的话,我有两个任务需要加载文件。

  1. 我需要创建一个包含以下子类的所有文件的列表 另一个类。
  2. 我需要加载语言文件列表(所有 它们位于同一目录中)。
<小时/>

如果您需要任何其他信息来帮助调试此问题或提供解决方案 - 请告诉我。感谢您阅读本文!

最佳答案

要使 ClassLoader.getResources() 正常工作,您需要提供相对于 jar 根目录的路径。如果您想搜索 jar,那么 ClassLoader 公共(public) API 将无法帮助您。您必须使用基于 java.util.jar.JarFile 的自定义代码,例如 here .

关于java - 在多个环境中动态加载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25496389/

相关文章:

java - 使用jboss5线程池启动线程

java - 将间隔与运算符一起使用 (RxJava)

java - 如何检查Java Eclipse 插件开发中的IFile 是否真的存在?

java - 在 Windows 7 中运行 Jar 时为 "Execution Protection Violation"

java - JVM 总是会创建 Object 类的实例吗

Java在与系统类加载器相关的子类加载器中动态加载类

java - Hibernate 多对多级联删除

java - 是否可以在不同的 servlet、相同的 WAR 中使用不同的 Spring Security AuthenticationProvider?

Java 如何使用系统类加载器(无 URLClassLoader)从类路径中的 jar 中加载类?

java - 序列化 java.lang.class