ClassLoader - 加载和保存数据

时间:2013-03-07 20:35:08

标签: resources classloader loading save data-management

希望有人能帮助我。

我的理解是,使用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");

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这不是真正的类加载器的意思。从类加载器加载资源意味着您可以将应用程序捆绑为一个程序包,组件可以相互读取,而不必担心要部署的系统是如何设置的。

如果应用程序要更改JAR中的文件,那么它不是应用程序的一部分,因此可能不应该在JAR中。

我的应用程序上没有很多上下文,但希望我的建议对您的情况有效。

我建议在您的应用中设置一个要求,它具有允许读写的工作区,并接受指定此目录所在位置的配置设置。在Java中执行此操作的典型方法是使用环境变量,系统属性或JNDI设置(用于容器部署)。

示例:

  1. Tomcat的启动脚本会找出它的安装位置并设置一个名为catalina.home的系统属性,并允许您使用名为CATALINA_HOME的环境变量覆盖它。
  2. JBoss寻找JBOSS_HOME
  3. Java应用程序服务器通常会查找JAVA_HOME以查找JDK。