Java工程路徑及相對路徑(轉載)

滄海一滴發表於2014-04-07

 3. 新建檔案,預設位於工程目錄
new File("xxx.txt").getAbsolutePath();
例如輸出,D:\workspaces\workspace1\myProject
如果使用ClassName.class.getResource("name.config")的結果作為File物件的引數,則會報錯:

java.io.FileNotFoundException: file:\D:\workspaces\workspace1\myProject\bin\com\hutu\log4j\name.config (檔名、目錄名或卷標語法不正確。)
at java.io.FileInputStream.open(Native Method)

 
 4. 配置檔案路徑
ApplicationContext context = new ClassPathXmlApplicationContext("Config.xml");
.xml, .properties等,預設還是從“工程目錄”去找的
1). 倒是也可以用絕對路徑,真心不推薦啊,太不優雅了;
2). 或者,將log4j檔案置於bin/目錄下:
     a). 程式碼中,PropertyConfigurator.configure("bin/log4j.properties");
     b). 程式碼中,PropertyConfigurator.configure(ClassLoader.getSystemResource("log4j.properties"));
     c). 注意,必須位於bin直接目錄下,不可位於bin更深層的目錄當中。可是這究竟是為神馬捏?
 5. 查詢某類的.class檔案所在目錄
Main.class.getResource(“”);
例如輸出,file:/D:/workspaces/workspace1/myProject/bin/com/hutu/log4j/
注意,查詢包上級路徑,只需將引數改作“/”
 6. 查詢thread上下文所在目錄
Thread.currentThread().getContextClassLoader().getResource("");
例如輸出,D:\workspaces\workspace1\myProject\bin\
 7. 查詢某類的classloader所在目錄
Main.class.getClassLoader().getResource("");
例如輸出,D:\workspaces\workspace1\myProject\bin\
 8. 查詢classloader所在目錄
ClassLoader.getSystemResource("");
例如輸出,D:\workspaces\workspace1\myProject\bin\

 class.getResourceAsStream("path")、class.getClassLoader().getResourceAsStream("path")區別的分析
class.getResourceAsStream("path"):如果path僅為一個檔名,則只會在包路徑下查詢,當path以“/”開頭時,則會從classpath的根路徑開始查找(SRC根目錄)
class.getClassLoader().getResourceAsStream("path"):無論要查詢的資源前面是否有"/"都是從classpath的根路徑下查詢。

 

相關文章