2013-12-15 176 views
0

我一直在研究幾個自然語言處理項目,用Java作爲我選擇的編程語言。我發現有一些純文本文件(例如帶有停用詞列表的文件),我反覆使用它們。由於我經常發現自己在不同地點和不同機器上工作,所以我想知道這些文本文件是否可以放在lib文件夾以及所有其他資源(例如外部.jar文件)中。文本文件可以放在Java項目中的其他資源中嗎?

我從來沒有見過被放置.txt文件的文件夾lib,所以我想問一下兩件事情:

  1. 將放置一個.txt文件中lib工作,還是會導致一些意想不到的災害?
  2. 放置/使用這些資源的傳統方式是什麼?
+0

你可以試試它。 –

+0

此外,具有'txt'擴展名的文件和'random123'擴展名的文件之間的計算機有什麼區別? –

+0

我只是在想同樣的...我想我想遵循一個傳統的設計/結構,而不是從我的頭頂做些事情。 –

回答

0

假設一個傳統的Maven佈局源代碼樹,把你的止損的話在src/main/resources。歡迎您將您的停用詞置於您和您的團隊直觀的任何文件夾結構中 - 或者根本沒有任何文件夾結構(位於頂層)。

這就是你需要擔心的問題,因爲Maven或Gradle會將它們包裝在war文件中,因爲它們應該是。然後,您以代碼getResourceAsStream的代碼獲取此資源,並在源樹中使用相對於資源資源文件夾的路徑進行調用。

0

只要/lib/內容,包括文本文件,放在類路徑上的,你可以放心地通過SomeClass.class.getResourceAsStream("/file.txt")獲取文本資源。

/表示絕對路徑。否則,路徑是相對於SomeClass的包(這又將相對於lib)。

0

是的,你可以把任何文件在您的罐子,任何文件夾中,因此對於閱讀本文件使用此:

getClass().getResourceAsStream("/folder/textfile.txt")) 
+0

'getResource()'和'getResourceAsStream()'被設計爲僅針對類路徑上的資源。作者並不暗示'lib'是一個包含在應用程序的JAR中的包。 – afk5min

+0

這些方法委託給ClassLoader(所以它可能在類路徑中,但取決於類加載器)嘗試獲取資源,我不認爲lib是一個包,我只說如何加載文件。 –

+0

但是,您必須承認,編寫一個'ClassLoader'只是爲了允許這樣訪問外部資源遠非最佳:) – afk5min

相關問題