2013-09-25 125 views
10

我在寫一些單元測試。我通過直接調用類來運行測試(而不是調用另一個程序)。問題是這些類中的一些使用由相對路徑定義的數據,因此它們要求程序在特定目錄中啓動。我怎樣才能改變這在Java中?Java更改文件工作目錄

例如,我的單元測試開始於C:/unittest,我需要的數據是C:/OtherProject。我不想修改其他項目的代碼,如果可能的話,是有這樣的事情在Java:

File.setWorkingDir("C:/OtherProject"); 

這樣,當像

File file = new File("data/data.csv"); 

會讀C:/OtherProject/data/data.csv而不是C:/unittest/data/data.csv

+0

如何在測試目錄中獲取用於測試目的的數據副本? – Fildor

+0

ASAIK,沒有可用的東西。 –

+0

這就是爲什麼人們使用數據庫共享相同的數據,管理相同的數據。 –

回答

11

更新我的答案,因爲VolkerSeibt指出它不正確。接得好。

這可能通過System.setProperty。您可以通過改變"user.dir"系統屬性改變當前的工作目錄:

System.setProperty("user.dir", "/foo/bar"); 

作進一步說明,請參見http://www.javacodex.com/Files/Set-The-Current-Working-Directory

+0

我已經做了很多週轉,這似乎確實如此。我已經解決了這個問題,只需要一個靜態類'FileUtil'來存儲工作目錄(並有訪問器),然後是一個函數'loadFile',它實際上只是將工作目錄預先設置爲傳遞的文件路徑。 – Andy

+1

這是錯的。請參閱http://www.javacodex.com/Files/Set-The-Current-Working-Directory。至少在Windows和Linux上工作。 –

+0

@VolkerSeibt:很好。我已經更新了我的答案。 – Bucket

0

我認爲工作目錄是由啓動jvm的目錄(執行java時使用的目錄)決定的。