普通的java專案獲取專案所在路徑
阿新 • • 發佈:2019-01-03
獲取專案根路徑,無論是打包成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); } }