2013-08-07 51 views
2

昨天,我遇到了一個問題,因爲我無法打開位於我的ressources文件夾中的xml文件(它給了我一個FileNotFoundException)。 jar文件,我設法使用下面的代碼行在eclipse上打開。你可以看到我的老問題here。這是我的代碼的問題:從eclipse打開xml文件並從java中的.jar文件打開一個xml文件

File xmlFile = new File("ressources/emitter.xml"); 
ConfigurableEmitter emitter = ParticleIO.loadEmitter(xmlFile); 

有人告訴我它的一個方法是使用getClassLoader()getRessourceAsStream方法來打開在導出.jar文件XML文件

InputStream i= this.getClass().getClassLoader().getResourceAsStream("ressources/emitter.xml"); 
ConfigurableEmitter emitter = ParticleIO.loadEmitter(i); 

不幸的是,這個解決方案只在將我的項目導出到.jar文件時才起作用,所以如果我想回去調試我的程序,我必須採用只能在eclipse上運行的舊代碼。

我的問題是:有沒有更好的方式來做到這一點,而不必更改我的代碼,如果我想導出它,或者我想調試它?

謝謝

編輯: 謝謝大家,現在工作完全正常 我的問題是,我把我的ressources文件夾那樣:

+project 

    +src 

    +ressources 

    +emitter.xml 

回答

1
InputStream i= this.getClass().getClassLoader().getResourceAsStream("/ressources/emitter.xml"); 

以上應在這兩種情況下工作(注意是爲/resources/...這是假設說你的目錄結構如下:

MyProject的

+src 
    +ressources 
     emitter.xml 
+0

非常感謝你,那就是問題所在。我把我的資源放在src文件夾中,它的工作很完美 –

+0

不幸的是,我需要15點聲望來upvote haha​​ –

+0

@TheriotgamesRiot現在你有15 :-) – Jatin

1

放置文件旁邊的源文件,那麼你可以在兩種情況下使用getResourceAsStream()方法。不要忘記更新路徑(這應該是班級的包名稱,但使用斜槓而不是點)。

0

我的問題是:有沒有更好的方式來做到這一點,而不必 改變我的代碼,如果我要出口,或者如果我要調試嗎?

是的,使用Maven。 Maven會處理這個問題,並且它能夠很好地與Eclipse掛鉤(NetBeans!)你所做的就是將資源放置在src/main/resources中,然後你可以讓Eclipse運行Maven項目的測試目標,或者你可以運行mvn test命令行。在這裏使用Maven的另一個優點是,您還可以使用src/test/resources/emitter.xml來替代src/main中的src/main,並使用特定於環境的測試說明,並且不會影響您的部署。

0
InputStream i= getClass().getClassLoader().getResourceAsStream("ressources/emitter.xml"); 

InputStream i= getClass().getResourceAsStream("/ressources/emitter.xml"); 

(注意是絕對定位)

上課的時候是在同一個瓶子,同一類路徑上都工作。

在jar中,名稱必須區分大小寫,但由於jar已經可用。確保ressources目錄也位於類路徑上,或者複製到目標目錄。由於「資源」可能是自己配置的(不像「英文」中的「資源」那樣),因此您可能需要以某種方式將其添加到構建中。