希望有人能帮助我。
我的理解是,使用ClassLoader是加载内容的最可靠方式。
public class Pipeline{
public static URL getResource(String filename) {
return ClassLoader.getSystemResource(filename);
}
public static InputStream getResourceAsStream(String filename) {
return ClassLoader.getSystemResourceAsStream(filename);
}
}
如果你的文件位于“[jar bundle] /resources/abc.png”,你可以加载它:
URL url = Pipeline.getResource("resources/abc.png");
装载很简单。
拯救就是我的目标。
我有一个程序在运行时收集数据,在退出时保存数据,然后在下次加载数据并继续添加数据。
最简单的解决方案我认为将保存回jar包中,以便ClassLoader可以获取它们。这甚至可能吗?还是推荐?
我不介意在jar之外拥有我的资源,只要我不必诉诸'File'来获取它们并保存给他们。 (除非可以干净利落地完成)
folder/application.jar
folder/resources/abc.png
如果你可以../从ClassLoader看起来那里找回一个,那么很容易从实际包含jar文件的目录中干净地获取数据
Pipeline.getResource("../resources/abc.png");
有什么想法吗?
答案 0 :(得分:1)
这不是真正的类加载器的意思。从类加载器加载资源意味着您可以将应用程序捆绑为一个程序包,组件可以相互读取,而不必担心要部署的系统是如何设置的。
如果应用程序要更改JAR中的文件,那么它不是应用程序的一部分,因此可能不应该在JAR中。
我的应用程序上没有很多上下文,但希望我的建议对您的情况有效。
我建议在您的应用中设置一个要求,它具有允许读写的工作区,并接受指定此目录所在位置的配置设置。在Java中执行此操作的典型方法是使用环境变量,系统属性或JNDI设置(用于容器部署)。
示例: