簡體   English   中英

如何從Jar / Classpath創建文件實例

[英]How to Create a File instance from the Jar/Classpath

我有一個可執行的JAR文件,其中有一個文件,我想通過代碼(不是InputStream或其他任何文件……)作為java.io.File實例打開。

它是一個maven項目,文件位於“ src / main / resources / file.xxx”的根目錄下。該文件在打包后位於jar的根目錄下(已驗證存在)。

我的第一次嘗試:FileNotFoundException

java.io.File myFile = new java.io.File("file.xxx");
someMethodThatUsesTheFile(myFile); //I really need it to be a file!!!

其他嘗試:FileNotFoundException

java.io.File myFile = new java.io.File("/file.xxx");
java.io.File myFile = new java.io.File("classpath:file.xxx");
java.io.File myFile = new java.io.File("classpath:/file.xxx");

我不確定到底發生了什么。 Web Apps可以輕松地從webapp根目錄中加載所有內容,我對為何JAR應用程序行為不同感到困惑。

附加信息:

  • 使用Java8作為運行時/構建
  • 運行JAR的命令:“ java -jar myjar.jar”
  • 應用程序代碼和文件都位於同一個jar中

簡短的回答:它不是“文件”,因此您無法做到。

JAR文件是文件,但不是其內容。

替代方法是:

  • 嘗試使用該方法的其他重載版本,InputStreams通常是您的選擇,您可以使用以下代碼加載它:

    InputStream是= getClass()。getResourceAsStream(“ file.xxx”);

  • 將該文件移出JAR並移至JAR的同一目錄(考慮安全風險)

試試這個可能對您有幫助:

URL url = this.getClass().getResource("src/main/resources/file.xxx");
File file= new File(url.toURI());

暫無
暫無

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

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