簡體   English   中英

Jar和文件I / O

[英]Jar and File I/O

在我的Java項目中,我在src / properties文件夾中有一些屬性文件。 在Eclipse中運行應用程序時,使用以下代碼加載和保存文件沒有問題:

    // create and load default properties
    Properties defaultProps = new Properties();
    File file = new File("src/properties/defaultProperties");
    if (!file.exists()){
        // Create new properties file
            ...
        FileOutputStream out = new FileOutputStream("defaultProperties");
        defaultProps.store(out, "---No Comment---");
        out.close();
    } else {
        // Load existing properties file
        FileInputStream in = new FileInputStream(file);
        defaultProps.load(in);
        in.close();
    }

但是,當我創建帶有Eclipse的Runnable Jar文件時,屬性無法正確加載。 保存文件時也會發生同樣的情況。 我讀到一些有關:

InputStream is = getClass().getResourceAsStream(path);

但是在這種情況下,如何檢查輸入流是否存在文件? 如何執行此I / O使其在可執行的Jar文件中工作的正確方法?

而是使用java.util.prefs.Preferences 它與java.util.Properties相似,不同之處在於它不是存儲在屬性文件中,而是存儲在平台特定的配置管理中。 例如,在Windows計算機上,這就是注冊表。

也可以看看:

getClass().getResourceAsStream(path);

是正確的方法。 你的屬性文件需要你的JAR文件中打包,並(如上使用)的路徑應該匹配的jar文件的屬性文件路徑。

請注意,您不會對此進行編寫。 如果您要包裝一個罐子,那么它(就所有意圖和目的而言)都是不可變的。

來自ClassLoader的javadocs

getResourceAsStream返回

用於讀取資源的輸入流;如果找不到資源,則為null

不要嘗試將資源寫回到Jar文件中。 歸檔文件通常由JVM鎖定。

而是將新選項序列化到本地文件系統上的某個位置(有許多選項可以實現此目的),並在默認為內部屬性之前檢查更改的文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM