1. 程式人生 > >普通的java專案獲取專案所在路徑

普通的java專案獲取專案所在路徑

獲取專案根路徑,無論是打包成jar檔案,還是除錯執行時,都能獲取到正確的專案所在目錄。

PathUtil.java

package application.util;

/***
 * 獲取專案根路徑工具類
 * @author Pelin
 * @time 2016-12-29
 */
public class PathUtil {
	/**如果沒打包後執行則debug為true*/
	public static boolean debug = false;
	/**專案所在路徑*/
	public static final String projectPath = initProjectPathAndDebug();
	
	/***
	 * 獲取專案根路徑,無論是打包成jar檔案。
	 * 為了保證除錯時獲取專案路徑,而不是bin路徑,增加邏輯: 如果以bin目錄接,則返回上一層目錄
	 * 例如:F:\eclipseworkJavaFX\PersonalAssistant  後面的bin目錄會去掉
	 * @return 例如:F:\eclipseworkJavaFX\AddressApp\build\dist
	 */
	private static String initProjectPathAndDebug(){
		java.net.URL url = PathUtil.class.getProtectionDomain().getCodeSource().getLocation();
		String filePath = null; 
		try {  
			filePath = java.net.URLDecoder.decode(url.getPath(), "utf-8");  
		}
		catch (Exception e) {  
			e.printStackTrace();  
		}
	    if (filePath.endsWith(".jar"))  {
	    	filePath = filePath.substring(0, filePath.lastIndexOf("/") + 1);  
	    }
	   //如果以bin目錄接,則說明是開發過程debug測試查詢,返回上一層目錄 
	    if (filePath.endsWith("bin/") || filePath.endsWith("bin\\") )  {
	    	debug = true;
	    	filePath = filePath.substring(0, filePath.lastIndexOf("bin"));  
	    }
	    java.io.File file = new java.io.File(filePath);  
	    filePath = file.getAbsolutePath(); 
	    return filePath;
	}
	
	/***
	 * 這個方法打包位jar檔案就無法獲取專案路徑了。
	 * @return
	 */
	public static String getRealPath() {  
		String realPath = PathUtil.class.getClassLoader().getResource("").getFile();  
		java.io.File file = new java.io.File(realPath);  
		realPath = file.getAbsolutePath();//去掉了最前面的斜槓/
		try {  
			realPath = java.net.URLDecoder.decode(realPath, "utf-8");  
		} catch (Exception e) {  
			e.printStackTrace();  
		}  
		return realPath;  
	}
	public static void main(String[] args) {
		System.out.println(projectPath);
	}
}