2012-02-28 358 views
1

我的文件位於src目錄下。但是,當我嘗試使用「src/readme.txt」調用它時,找不到該文件。事實上,它聲明java正在尋找「C:\ Documents and Settings \ john \ My Documents \ Downloads \ eclipse-win32 \ eclipse \ coolCarsProject \ src \ readme.txt」。Eclipse項目無法使用相對路徑引用文件

我該如何解決這個問題?我不想一直放在絕對路徑上。

是否需要修復類路徑,構建路徑或更改項目根等?從Eclipse的大約1000個設置來看,這對新手來說並不明顯。

+0

澄清「稱之爲」的含義。你是否想從單元測試中將它作爲一個文件引用?如果是這樣,請檢查您的運行配置測試,參數選項卡,工作目錄設置。這通常包含一個引用'$ {workspace_loc:your-project}',它將使相對引用工作正常。 「coolCarsProject」的+1號爲 – mgaert 2012-02-28 23:04:35

+1

。 -1運行你的Eclipse /把你的項目放到「Downloads」文件夾中。 – mgaert 2012-02-28 23:06:40

+1

作爲建議的一般詞彙,以咆哮開始您的問題不是讓人們幫助您的好方法。如果您不知道某些事情,請承認它並明確陳述您的問題,而不要指責這些工具。除此之外,爲了獲得這個特定問題的有用答案,你應該在你想要訪問文件的地方包含一段代碼。 – 2012-02-28 23:06:41

回答

9

首先,您必須決定是否要從文件系統加載文件,或者文件實際上是否與應用程序代碼捆綁在一起。

如果是前者,那麼您應該真正考慮在實際部署時如何啓動應用程序,因爲使用相對文件路徑意味着程序始終應該從相同位置開始:相對路徑相對於程序啓動的位置(當前目錄)。如果這真的是你想要的,那麼在Eclipse中編輯你的啓動配置,進入參數選項卡,並設置你想要的工作目錄。但是src目錄並不是你應該放置這個文件的地方,因爲這會將文件和類一起復制到目標目錄中,一旦你部署應用程序,這些類可能會被放入jar中。

如果是後者,則不應將該文件視爲文件,而應將其視爲由ClassLoader使用ClassLoader.getResourceAsStream()(或Class.getResourceAsStream())加載的資源。閱讀這些方法的javadoc以瞭解要傳遞的路徑。如果將文件直接放在src下,它將被Eclipse複製到默認包中的目標目錄和類中。你應該使用SomeClass.class.getResourceAsStream("/readme.txt")加載它。

+0

很好說。 – biziclop 2012-02-28 23:17:25

+0

JB這非常有幫助。非常感謝。 – user798719 2012-02-29 21:00:10

1

使用相對於當前工作目錄的路徑通常不是一個好主意,因爲通常很難確定你當前的工作目錄是什麼。在Eclipse中,它將成爲您的項目文件夾(除非您在啓動配置中將其設置爲不同的內容),在webapps中它將成爲webapp的根目錄,在命令行應用程序中它可能是任何東西。

+0

「在webapps中它將成爲webapp的根目錄」 - 最好檢查一下,它也可以下注容器的起始目錄。所以你是對的 - 不要假設任何事情。 – mgaert 2012-03-01 15:43:30

+0

@mgaert好點。 – biziclop 2012-03-01 18:36:29

1

試試這個:«\»

String filePath = ".\\userFiles\\data.json"; 

其中,是Eclipse項目,«userFiles»根是Eclipse項目的內部用戶的文件的文件夾。因爲我們正在談論Windows操作系統,所以我們不得不在Linux中使用«/»,而是使用«/»,但«\»是保留符號,所以我們必須鍵入«\\»(雙反斜槓)來獲得預期的結果。