亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在運行時和 dev-env 中從 jar 中復制文件夾的資源?

如何在運行時和 dev-env 中從 jar 中復制文件夾的資源?

喵喵時光機 2022-11-30 16:58:04
我目前正在制作一款具有預制關卡的游戲,目前我將它們存儲在資源中。我想要一個解決方案,以解決如何在生產和開發環境中從 jar 中提取文件夾的問題。我嘗試使用下面給定的方法復制文件夾并將 src asFile defaultWorld = new File(GameData.class.getClassLoader().getResource("worlds/").getFile()); 和 destination as傳遞private static File worldsDir = new File("run/worlds");public static void copyFolder(File src, File dest) {    try {        if (src.isDirectory()) {            if (!dest.exists()) {                dest.mkdir();            }            String[] files = src.list();            for (String file : files) {                copyFolder(new File(src, file), new File(dest, file));            }        } else {            try (InputStream in = new FileInputStream(src)) {                try (OutputStream out = new FileOutputStream(dest)) {                    byte[] buffer = new byte[1024];                    int length;                    //copy the file content in bytes                    while ((length = in.read(buffer)) > 0) {                        out.write(buffer, 0, length);                    }                }            }        }    } catch (IOException e) {        e.printStackTrace();    }}我希望上述方法適用于開發環境和生產環境,但FileNotFoundException在打開文件輸出流時會拋出。
查看完整描述

1 回答

?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

不能列出 jar 中的資源。

您正在考慮的任何解決方法都是不可靠的。

  • 永遠不要調用getFile()URL 的方法。它返回有效的文件名;它只返回 URL 的路徑和查詢部分,任何百分比轉義都完好無損。此外,jar 條目不是file:URL,因此資源路徑在引用 jar 條目時永遠不可能是有效的文件名。

  • 在 jar 文件中列出內容的唯一方法是遍歷所有 jar 條目,但您甚至不能保證可以訪問您的 jar,因為不能保證 ClassLoaders 是 URLClassLoaders,并且通常不能保證使用jar:URL .

  • 您甚至不能依賴 MyApplication.class.getProtectionDomain().getCodeSource(),因為getCodeSource() 可以返回 null。

如果你想從你的 jar 中復制多個文件,這里有一些可靠的方法:

  • 硬編碼您計劃復制的資源列表。這是您的應用程序,因此您知道要放入 jar 中的文件。

  • 在您的 jar 中保留一個文本文件,其中包含要復制的資源路徑列表。

  • 將您的資源存儲在嵌入在您的 jar 中的單個 zip 存檔中,并使用包裝 MyApplication.class.getResourceAsStream的ZipInputStream 自行提取它。


查看完整回答
反對 回復 2022-11-30
  • 1 回答
  • 0 關注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號