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

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

我想部署在類路徑中包含一些文件的 jar

我想部署在類路徑中包含一些文件的 jar

慕碼人8056858 2023-10-13 16:28:18
當我使用此命令執行 jar 時java -jar myapp.jar,我遇到了FileNotFoundException.我的項目是一個基本的 Gradle java 應用程序。我把文件放在ROOT/src/main/resources/testfile/test1.txt. 我嘗試在 IDE 中運行代碼以使用類路徑檢查文件是否存在。File file = ResourceUtils.getFile("classpath:testfile/test1.txt"); System.out.println(file.exists());這是真的,但是當我執行命令“gradle build”的結果的構建文件時,我遇到了 FileNotFoundException。(\BOOT-INF\classes\testfile\test1.txt)當我取消歸檔 jar 時,我可以看到該文件。實際上,我想使用示例文件部署 spring boot jar,并且我將放置用于初始化的代碼。請幫忙。謝謝。
查看完整描述

3 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

假設您實際上想要讀取文件而不是嘗試使用類加載器來尋址資源:


    InputStream in = getClass().getResourceAsStream("/testfile/test1.txt");

    BufferedReader reader = new BufferedReader( new InputStreamReader( in ) );

    String line = null;

    while( (line = reader.readLine() ) != null )

      System.out.println("Line: " + line);


這對我有用


查看完整回答
反對 回復 2023-10-13
?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

您無法將 jar 內的資源讀取為 java.io.File,正如 @Shailesh 共享的鏈接中所述

InputStream is = this.getClass().getClassLoader().getResourceAsStream("classpath:testfile/test1.txt"))

將文件作為輸入流讀取,然后可以將其轉換為 String,然后根據需要將其轉換為類。


查看完整回答
反對 回復 2023-10-13
?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

'this.getClass().getClassLoader().getResourceAsStream()' 是一個不錯的選擇


我遇到同樣的問題。唯一的區別是我想要讀取文件后的返回類型—— String 。于是,我找到了一個好用的api—— this.getClass().getClassLoader().getResource(String name)。


String read = null;

URL resource = this.getClass().getClassLoader().getResource("static/facility-tree.json");

CharSource charSource = Resources.asCharSource(resource, Charset.defaultCharset());

read = charSource.read();

CharSource和Resources來自Guava,因此需要在pom.xml中添加依賴。


<!--guava->

<dependency>

    <groupId>com.google.guava</groupId>

    <artifactId>guava</artifactId>

    <version>31.1-jre</version>

</dependency>


查看完整回答
反對 回復 2023-10-13
  • 3 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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