2011-07-29 82 views
2

我試圖從公共類中訪問數據文件,這兩個文件都位於JAR文件中。但是,當我在Hadoop集羣上執行jar時,系統會拋出FileNotFoundException。底線是:在羣集上運行應用程序時是否可以訪問Jar內的資源,或者是否需要單獨將資源複製到HDFS,對於上述任何一種情況,您將如何去實現它?從Jar文件中訪問.dat文件

謝謝!

回答

1

是的,如果JAR位於CLASSPATH中,則可以使用類加載器或servlet上下文來調用getResourceAsStream()以獲取對該文件的InputStream的引用。

您將無權訪問文件路徑。您提供了一個相對於CLASSPATH的路徑,類加載器找到該文件。你可以得到內容,但不是絕對的位置。

你不應該要絕對的位置。你會用它做什麼?

您無法寫入文件。你不能改變任何東西。如果您的應用程序打包在WAR文件中,則無法更改其內容。

+0

因此,InputStream是否將JAR中的文件路徑作爲字符串傳遞給程序,還是將它作爲流在整個文件中讀取,因爲我需要字符串作爲文件所在的位置。 –

+0

由於OP實際上以「或/或」格式提出了兩個問題,所以'是'有點混淆。其餘的答案很明顯。 –

+0

*「我需要該文件所在的字符串」* 1)它不是文件,而是檔案中的資源。 2)幾乎從來沒有**將'File'或'URL'對象轉換爲'String'的好主意。你爲什麼認爲你需要這個? –