2014-01-06 168 views
1

我剛開始一個新的遊戲項目,我想通過閱讀文件來創建世界。編譯後無法找到Classpath文件

在Eclipse中,一切都很好,文件成功加載。正在使用的圖像也正在加載。

但是,如果我編譯項目並執行.jar圖像仍然工作,但文件無法找到。

ImageIO.read(SpriteSheet.class.getResourceAsStream("...")); 

,並通過使用路徑的文件:

我使用的類路徑加載的圖像

new File("...") 

它們都在同一個文件夾中,我不知道現在爲什麼這樣做不工作,因爲在Eclipse中的 一切工作正常,但編譯後它不再工作。

+0

http://stackoverflow.com/questions/7718807/can-getresourceasstream-find-files-outside-the-jar-file這可能會有所幫助。 –

+0

你的英語非常好,所以我很驚訝你說「我」而不是「我」(這是我唯一的語法修正)。 – ADTC

回答

1

假設你正在使用相對路徑,

當您使用getResoureAsStream你可以在你的classpath加載任何文件。

但是,當你使用new File文件必須駐留在當前工作目錄或操作系統的路徑環境變量(不一定是你的類路徑)定義的任何文件夾中。

您的Eclipse很可能能夠拾取該文件,因爲它正在從該文件所在的位置執行程序。你不能做同樣的事情,因爲你正在從別處執行程序。

+0

我怎樣才能得到類路徑中的實際文件? – user3166097

+1

你不能。 'File'不是爲了在你的類路徑中獲取文件而設計的。它旨在讓您的硬盤上的任何文件。通常你會在'new File(「...」)中定義一個完整的絕對路徑,因爲相對路徑不能保證從* system到system *或從* run到run *是相同的。但是,您可以在環境的'PATH'變量中添加保存文件的文件夾,並且您的程序應該能夠找到它。 ...要繼續使用相對路徑,必須確保從正確的工作目錄運行程序,以便通過相對路徑查找文件。 – ADTC

+0

相比之下,'getResourceAsStream'的目的是讓文件存儲在你的jar文件中('File'不能做到這一點),這就是爲什麼你可以使用它加載類路徑中的資源。您通常使用它來加載與程序捆綁在一起的資源,而不是由程序外的用戶保存的文件(您將使用'File')這兩個文件用於不同類型的文件加載,互換**。不要混淆兩者。 – ADTC

相關問題