2013-03-07 49 views
0

希望有人可以帮助我。ClassLoader - 加载和保存数据

我的理解是使用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包] /resources/abc.png” ..你会被加载:

URL url = Pipeline.getResource("resources/abc.png"); 

加载简单。
储蓄是什么让我。

我有一个程序在运行时收集数据,在退出时保存数据,然后在下一次加载数据并继续添加。

我认为最简单的解决方案是将其保存回jar包,以便ClassLoader可以获取它们。这甚至有可能吗?还是推荐?

我不介意让我的资源在罐子外面,只要我不必诉诸'文件'来获取它们并保存到它们。 (除非能做到干净)

folder/application.jar 

folder/resources/abc.png 

如果你能回来../一个从那里的ClassLoader期待它会很容易干净地得到实际包含的jar文件的目录数据

Pipeline.getResource("../resources/abc.png"); 

有没有想法?

回答

1

这不是真正的类装载机。从类加载器加载资源意味着您可以将应用程序打包,因为一个程序包和组件可以互相读取,而无需担心要部署的系统的安装方式。

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

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

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

例子:在那里安装并设置一个系统属性叫的catalina.home

  1. Tomcat的启动脚本找出并允许您为忽略一个名为CATALINA_HOME的环境变量它。
  2. JBoss寻找JBOSS_HOME
  3. Java应用程序服务器通常会查找JAVA_HOME来查找JDK。
+0

对,如果我只是需要捆绑一些资源与应用程序的功能。然后ClassLoader可以加载它们,但是如果我需要向资源添加数据,那么我应该有一个外部数据工作区。我会看看你的例子,并找到一个适用于我的案例的解决方案。干杯〜! – LucidObscurity 2013-03-10 22:26:52