第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

ClassLoader 在構(gòu)建后找不到資源文件

ClassLoader 在構(gòu)建后找不到資源文件

動(dòng)漫人物 2021-10-17 16:57:31
我一直在嘗試引導(dǎo) Java ClassLoader 從test/resources部署后的目錄中檢索 JSON 文件時(shí)遇到問(wèn)題。public class TestFileUtil {    private static final ClassLoader classLoader = TestFileUtil.class.getClassLoader();    public static Map<String, Object> getJsonFileAsMap(String fileLocation) {        try {            return new ObjectMapper().readValue(getTestFile(fileLocation), HashMap.class);        } catch (IOException e) {            throw new RuntimeException("Error converting JSON file to a Map", e);        }    }    private static File getTestFile(String fileLocation) {        return new File(classLoader.getResource(fileLocation).getFile());    }}該實(shí)用程序在使用 Mockito 進(jìn)行本地測(cè)試期間沒(méi)有問(wèn)題,如下所示:public class LocalTest {    @Before    public void setUp() {        Mockito.when(mockDataRetrievalService.getAssetJsonById(Mockito.any())).thenReturn(TestFileUtil.getJsonFileAsMap("test.json"));    }}但是,在我們部署的環(huán)境中構(gòu)建時(shí),這一行會(huì)引發(fā) FileNotFound 異常。使用相對(duì)目錄路徑時(shí)"../../test.json",我在兩種環(huán)境中都看到 FileNotFound 異常。本地目錄結(jié)構(gòu):test| java| |- project| |  |- LocalTest| |- util| |  |- TestFileUtil.class| resources| |- test.json部署后:test| com| | project| | | dao| | | | LocalTest| | other project| | | | util| | | | | TestFileUtil.class| | | | | test.json在自動(dòng)構(gòu)建中使用 ClassLoader 是否有任何特殊行為或所需的目錄結(jié)構(gòu)?
查看完整描述

1 回答

?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊

最有可能的問(wèn)題是:


new File(classLoader.getResource(fileLocation).getFile());

URL 類的 getFile() 方法不返回有效的文件名。它只返回 URL 的路徑部分,不能保證它是有效的文件名。(當(dāng) URL 類作為 Java 1.0 的一部分被引入時(shí),方法名稱是有意義的,因?yàn)閹缀跛?URL 實(shí)際上都引用了物理文件,無(wú)論是在同一臺(tái)機(jī)器上還是在不同的機(jī)器上。)


ClassLoader.getResource 的參數(shù)不是文件名。它是一個(gè)相對(duì) URL,其基礎(chǔ)是 ClassLoader 的類路徑中的每個(gè)位置。如果要讀取與應(yīng)用程序捆綁在一起的資源,請(qǐng)不要嘗試將資源 URL 轉(zhuǎn)換為文件。將 URL 作為 URL 讀取:


public class TestFileUtil {

    private static final ClassLoader classLoader = TestFileUtil.class.getClassLoader();


    public static Map<String, Object> getJsonFileAsMap(String fileLocation) {


        try {

            return new ObjectMapper().readValue(getTestFile(fileLocation), HashMap.class);

        } catch (IOException e) {

            throw new RuntimeException("Error converting JSON file to a Map", e);

        }

    }


    private static URL getTestFile(String fileLocation) {


        return classLoader.getResource(fileLocation);

    }

}

如果您想讀取不屬于您的應(yīng)用程序的文件,請(qǐng)根本不要使用 getResource。只需創(chuàng)建一個(gè) File 實(shí)例。


查看完整回答
反對(duì) 回復(fù) 2021-10-17
  • 1 回答
  • 0 關(guān)注
  • 450 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)