2017-05-05 100 views
0

我有這個項目,它具有這種結構如何在jar中導入文件?

Home 
graphics 
    field.txt 
    example.java 

我需要在我的罐子example.java加載field.txt我用:

getClass().getClassLoader().getResource("field.txt").toUri(); 

但是這個代碼它給我「空指針異常「。任何人都可以幫助我?

+1

你可能會發現你的答案在這裏的http:// stackoverflow.com/questions/20389255/reading-a-resource-file-from-within-jar –

+0

這看起來很奇怪,通常項目沒有主目錄。 。 – strash

+0

檢查你的jar文件文件是否真的在那裏,或者它缺少構建 –

回答

0
example.class.getResource(「/graphics/field.txt「); 

該類應該屬於同一個罐子。對於Class.getResource,可以使用相對的「field.txt」(相同的包)。使用ClassLoader時,所有類路徑的絕對路徑將被搜索:「graphics/field.txt」。

要立即閱讀(從來不寫)使用getResourceAsStreamgetResource的URI。可以在URI上使用Path。 Files.copy(...)


我們不能,至少不應該)寫一個資源文件(因爲它可以駐留在一個罐子jar:file://...;和jar甚至可能被密封;和資源可能被JVM緩存)。將其保持爲只讀模板。從不File

一種技術是在System.getProperty("user.home")創建一個名爲目錄的應用程序和複製的模板在那裏。

+0

是和如果我想把結果放到:File f = new File(example.class.getResource(「/ graphics/field.txt 「));這樣不行嗎? – ddd

+0

添加了一些文字。不幸的是,我不明白你希望將數據導入資源中,這些資源是作爲只讀文件使用的。抱歉 –

0

要閱讀它必須在類路徑的文件,可以把文件夾中包含的.class文件或將其與java命令選項添加到類路徑。

0

問題不在於您的代碼,而在於如何構建和打包您的jar文件。你將不得不澄清你目前如何構建你的jar(使用ant,maven,eclipse等)。

許多文章也建議您將資源從源代碼(的.java)分離出來,許多IDE將通過允許您標記一個文件夾作爲一個資源文件夾照片直接支持這種分離。即使maven可以讓你自定義這個。

請參見下面的文章: