簡體   English   中英

獲取資源的路徑

[英]Getting a resource's path

我一直在尋找一種從資源文件夾中的文件中獲取文件 object 的方法。 我在這個網站上閱讀了很多類似的問題,但沒有完全解決我的問題。 一個答案How to get a path to a resource in a Java JAR 文件非常接近回答我的問題:

String path = this.getClass().getClassLoader().getResource(<resourceFileName>).toExternalForm()

我正在嘗試擁有一個可以寫入數據的資源文件,然后將該文件 object 帶到我程序的另一部分,我知道我可以在技術上創建一個臨時文件,然后將數據寫入該文件,然后將其傳遞到我的一部分程序,這種方法的問題是我認為它可能需要很多系統資源,我的程序將需要創建很多這些臨時文件。

有什么辦法可以重用資源文件夾中的一個文件? 我只需要得到它的路徑(它需要在一個罐子里工作)。 我已經嘗試過我為測試創建的這個代碼片段,我真的不知道為什么它返回 false,因為在 ide 中它返回 true。

    public File getFile(String fileName) throws FileNotFoundException {
        //Getting file from the resources folder
        ClassLoader classLoader = getClass().getClassLoader();
        URL fileUrl = classLoader.getResource(fileName);

        if (fileUrl == null)
            throw new FileNotFoundException("Cannot find file " + fileName);

        System.out.println("before: " + fileUrl.toExternalForm());

        final String result = fileUrl.toExternalForm()
                .replace("jar:" , "")
                .replace("file:" , "");
        

        System.out.println("after: " + result);

        return new File(result);
    }

Output:
before: jar:file:/C:/Users/%myuser%/Downloads/Untitlecd.jar!/Recording.wav
after: /C:/Users/%myuser%/Downloads/Untitlecd.jar!/Recording.wav
false

我一直在尋找一種從資源文件夾中的文件中獲取文件 object 的方法。

這是完全不可能的。 資源文件夾最終會進入您的發行版,並且您無法編輯 jar 文件,它們是只讀的(或者至少,您應該這樣認為。非愚蠢的部署通常會標記自己的代碼文件(包括那些罐子)作為只讀的運行進程。即使不是,編輯 jar 文件非常繁重,不是你想做的事情。即使你這樣做,在 windows 上,打開的文件也不能像這樣編輯/替換沒有明顯的頭痛)。

“資源”文件夾根本不是為要修改的文件而設計的。

通常的策略是在某個地方創建一個目錄(例如,用戶的主目錄,通過System.getProperty("user.home")訪問,然后在該目錄中創建/編輯文件。如果您願意,可以將模板放入您的資源文件夾並使用它們來“初始化”該目錄並使用骨架版本掛在用戶的主目錄之外。

如果您要制作幾萬個文件,則需要將需要此的任何過程調整為不需要此。 例如,通過使用數據庫(H2,也許,如果您想將它與您的 java 應用程序一起提供並使其影響盡可能低)。

暫無
暫無

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

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