2013-03-07 48 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