我有一個Maven2的單元測試一些容易混淆的行爲。下面的測試代碼產生在Eclipse中運行與Maven2的不同的結果:Java文件類在Windows 7中使用相對路徑
File f = new File(JUnitConstants.TEST_FILE);
File root = new File(".");
Log.info("File Info:");
Log.info(f.toString() + (f.exists() ? " exists" : " doesn't exist"));
Log.info(f.getAbsoluteFile().toString() + (f.getAbsoluteFile().exists() ? " exists" : " doesn't exist"));
Log.info(root.toString() + (root.exists() ? " exists" : " doesn't exist"));
Log.info(root.getAbsoluteFile().toString() + (root.getAbsoluteFile().exists() ? " exists" : " doesn't exist"));
在Eclipse中,一切都存在,單元測試運行正常。在maven中,f.exists()方法返回false;所以它認爲該文件不存在!下面是從行家運行測試輸出:
2013-01-10 09:50:51,737 [main] INFO - File Info:
2013-01-10 09:50:51,737 [main] INFO - target\test-classes\test\test.img doesn't exist
2013-01-10 09:50:51,737 [main] INFO - C:\Users\me\code\HEAD\modules\project\target\test-classes\test\test.img exists
2013-01-10 09:50:51,737 [main] INFO - . exists
2013-01-10 09:50:51,737 [main] INFO - C:\Users\me\code\HEAD\modules\project\. exists
因此,該文件存在,根目錄是我所期望的,但爲什麼的Java認爲文件不存在,使用相對路徑的時候?
我在Windows 7中,64位;使用JDK 1.6_38 32位。
,你能否告訴我們'JUnitConstants.TEST_FILE'的確切價值? –
當然,它是'公共靜態最終字符串TEST_FILE =「目標/測試類/測試/測試.img」;'我會注意到更改/到File.separator似乎沒有在這種情況下有所作爲。 – cneller
我認爲它在Maven中因爲filepath的'target'和'test-classes'部分而被破壞。嘗試使用'「test/test.img」'作爲你的相對路徑。這個文件在你的項目結構中的位置?我認爲它應該在'/ src/test/resources /'後面跟隨你的測試包。我不確定這是否會在Eclipse中工作,但我不使用該IDE。 –