欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java獲取文件路徑所有方式的詳細介紹

 更新時間:2025年08月23日 09:55:16   作者:豬油唐  
在Java編程中我們經(jīng)常需要獲取文件的路徑,以便對文件進行讀取、寫入或其他操作,這篇文章主要介紹了java獲取文件路徑所有方式的相關資料,需要的朋友可以參考下

前言

在 Java 中,獲取文件路徑是開發(fā)中常見的需求,尤其是在處理資源文件、配置文件或動態(tài)路徑拼接時。以下是 Java 獲取文件路徑的所有方式 的詳細介紹:

一、使用System屬性獲取路徑

1. 獲取當前工作目錄

String currentDir = System.getProperty("user.dir");
System.out.println("當前工作目錄: " + currentDir);
  • 適用場景:獲取 Java 程序的啟動目錄(即命令行運行程序的位置)。

2. 獲取用戶主目錄

String userHome = System.getProperty("user.home");
System.out.println("用戶主目錄: " + userHome);
  • 適用場景:獲取操作系統(tǒng)用戶的主目錄(如 Windows 的 C:\Users\用戶名)。

3. 獲取 Java 安裝目錄

String javaHome = System.getProperty("java.home");
System.out.println("Java 安裝目錄: " + javaHome);
  • 適用場景:獲取 Java 運行時的安裝路徑。

二、使用File類獲取路徑

1. 獲取文件的絕對路徑

File file = new File("example.txt");
String absolutePath = file.getAbsolutePath();
System.out.println("絕對路徑: " + absolutePath);
  • 適用場景:獲取當前文件對象的絕對路徑(基于當前工作目錄)。

2. 獲取規(guī)范路徑(解析符號鏈接)

try {
    String canonicalPath = file.getCanonicalPath();
    System.out.println("規(guī)范路徑: " + canonicalPath);
} catch (IOException e) {
    e.printStackTrace();
}
  • 適用場景:獲取去除符號鏈接后的實際路徑(如 ..~ 的解析)。

3. 獲取父目錄路徑

String parentPath = file.getParent();
System.out.println("父目錄: " + parentPath);
  • 適用場景:獲取文件的父目錄路徑(如 C:\project\srcC:\project\src\main.java 的父目錄)。

三、使用ClassLoader獲取資源路徑

1. 使用Class.getResource()獲取類路徑下的資源

URL resourceUrl = Demo.class.getResource("/config.properties");
if (resourceUrl != null) {
    String resourcePath = resourceUrl.getPath();
    System.out.println("資源路徑: " + resourcePath);
}
  • 適用場景:獲取類路徑(src/main/resources)下的資源文件路徑。
  • 注意:路徑以 / 開頭表示從類路徑根目錄開始查找。

2. 使用ClassLoader.getResource()獲取資源

ClassLoader classLoader = Demo.class.getClassLoader();
URL resourceUrl = classLoader.getResource("config.properties");
if (resourceUrl != null) {
    String resourcePath = resourceUrl.getPath();
    System.out.println("資源路徑: " + resourcePath);
}
  • 適用場景:與 Class.getResource() 類似,但路徑不以 / 開頭。

3. 解碼 URL 路徑中的特殊字符

try {
    String decodedPath = URLDecoder.decode(resourceUrl.getPath(), "UTF-8");
    System.out.println("解碼后路徑: " + decodedPath);
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}
  • 適用場景:處理 URL 路徑中的編碼(如 %20 表示空格)。

四、使用Paths類(Java 7+)

1. 獲取當前工作目錄的絕對路徑

Path currentDir = Paths.get(".").toAbsolutePath();
System.out.println("當前目錄: " + currentDir);

2. 拼接路徑

Path filePath = Paths.get(currentDir.toString(), "example.txt");
System.out.println("文件路徑: " + filePath);
  • 適用場景:跨平臺路徑拼接(自動適配 /\)。

五、使用URI獲取路徑

1. 將文件轉換為 URI

File file = new File("example.txt");
URI uri = file.toURI();
System.out.println("URI 路徑: " + uri.getPath());

2. 使用 URI 加載資源

URL resourceUrl = Demo.class.getResource("/example.txt");
URI resourceUri = resourceUrl.toURI();
System.out.println("URI 路徑: " + resourceUri);
  • 適用場景:處理網(wǎng)絡資源或本地文件路徑的統(tǒng)一標識。

六、Web 應用中的路徑獲取

1. JSP 中獲取路徑

<%
    // 獲取當前頁面全路徑
    String requestURI = request.getRequestURI();
    out.println("請求路徑: " + requestURI);

    // 獲取工程名
    String contextPath = request.getContextPath();
    out.println("工程名: " + contextPath);

    // 獲取服務器上的物理路徑
    String realPath = application.getRealPath("/");
    out.println("物理路徑: " + realPath);
%>

2. Servlet 中獲取路徑

// 獲取工程目錄
String realPath = getServletContext().getRealPath("/");
System.out.println("工程目錄: " + realPath);

// 獲取請求地址
String requestURL = request.getRequestURL().toString();
System.out.println("請求地址: " + requestURL);

七、Spring Boot 中獲取資源路徑

1. 使用getResourceAsStream讀取資源

InputStream inputStream = getClass().getClassLoader().getResourceAsStream("config.properties");
if (inputStream != null) {
    // 讀取流內容
}
  • 適用場景:資源嵌套在 JAR 包中時,無法直接獲取文件路徑,需通過輸入流讀取。

八、其他方式

1. 使用ProtectionDomain獲取類文件路徑

URL classLocation = Demo.class.getProtectionDomain().getCodeSource().getLocation();
String classPath = classLocation.getPath();
System.out.println("類文件路徑: " + classPath);
  • 適用場景:獲取編譯后的 .class 文件路徑(如 JAR 包路徑)。

2. 使用File.separator處理跨平臺路徑

String path = "D:" + File.separator + "test" + File.separator + "file.txt";
System.out.println("跨平臺路徑: " + path);
  • 適用場景:手動拼接路徑時確保兼容性(Windows 用 \,Linux 用 /)。

九、注意事項

  1. 資源在 JAR 包內時

    • 無法通過 getFile() 獲取實際路徑,需使用 getResourceAsStream() 讀取流。
    • 示例:
      InputStream inputStream = getClass().getResourceAsStream("/config.properties");
      
  2. 路徑編碼問題

    • URL 路徑可能包含編碼(如 %20 表示空格),需使用 URLDecoder 解碼。
  3. 相對路徑與絕對路徑

    • 相對路徑基于當前工作目錄(user.dir),絕對路徑是完整路徑。
  4. Web 應用與普通 Java 應用

    • Web 應用中路徑通?;?WebRootWEB-INF/classes
    • 普通 Java 應用中路徑基于項目根目錄或類路徑。

總結

方法適用場景是否跨平臺是否涉及 I/O
System.getProperty獲取系統(tǒng)屬性路徑
File.getAbsolutePath獲取文件絕對路徑
ClassLoader.getResource獲取類路徑資源
Paths.get(...)跨平臺路徑拼接
URI統(tǒng)一資源標識
Web 應用中的 request獲取 Web 請求路徑
getResourceAsStream讀取 JAR 內資源

根據(jù)具體需求選擇合適的方法,確保路徑處理的靈活性和兼容性。

到此這篇關于java獲取文件路徑所有方式的文章就介紹到這了,更多相關java獲取文件路徑內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JAVA8 STREAM COLLECT GROUPBY分組實例解析

    JAVA8 STREAM COLLECT GROUPBY分組實例解析

    這篇文章主要介紹了JAVA8 STREAM COLLECT GROUPBY分組實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • SpringBoot調用DeepSeek接口的實現(xiàn)

    SpringBoot調用DeepSeek接口的實現(xiàn)

    本文主要介紹了SpringBoot調用DeepSeek接口的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-02-02
  • SpringCloud手寫Ribbon實現(xiàn)負載均衡

    SpringCloud手寫Ribbon實現(xiàn)負載均衡

    這篇文章主要介紹了SpringCloud手寫Ribbon實現(xiàn)負載均衡的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • java 排序算法之歸并排序

    java 排序算法之歸并排序

    本文主要講解了排序算法中的歸并排序,文中運用大量的圖片和代碼講解的非常詳細,感興趣的朋友可以學習一下這篇文章,相信可以幫助到你
    2021-09-09
  • Java中的ThreadLocal與ThreadLocalMap詳解

    Java中的ThreadLocal與ThreadLocalMap詳解

    這篇文章主要介紹了Java中的ThreadLocal與ThreadLocalMap詳解,ThreadLocal 是一個線程局部變量,其實的功用非常簡單,就是為每一個使用該變量的線程都提供一個變量值的副本,是Java中一種較為特殊的線程綁定機制,需要的朋友可以參考下
    2023-09-09
  • MyBatis按時間排序方式

    MyBatis按時間排序方式

    這篇文章主要介紹了MyBatis按時間排序方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringMVC中的攔截器與異常處理機制詳解

    SpringMVC中的攔截器與異常處理機制詳解

    這篇文章主要介紹了SpringMVC中的攔截器與異常處理機制詳解,SpringMVC的攔截器類似于Servlet開發(fā)中的過濾器Filter,用于對處理器進行預處理和后處理,需要的朋友可以參考下
    2024-01-01
  • Java中Socket實現(xiàn)數(shù)據(jù)通信的示例代碼

    Java中Socket實現(xiàn)數(shù)據(jù)通信的示例代碼

    本文主要介紹了Java中Socket實現(xiàn)數(shù)據(jù)通信的示例代碼,Socket可以建立起客戶端和服務器之間的連接,實現(xiàn)數(shù)據(jù)的傳輸和交互,感興趣的可以了解一下
    2023-09-09
  • Java經(jīng)典面試題匯總:多線程

    Java經(jīng)典面試題匯總:多線程

    本篇總結的是Java多線程相關的面試題,后續(xù)會持續(xù)更新,希望我的分享可以幫助到正在備戰(zhàn)面試的實習生或者已經(jīng)工作的同行,如果發(fā)現(xiàn)錯誤還望大家多多包涵,不吝賜教,謝謝
    2021-07-07
  • Spring boot 整合 Okhttp3 并封裝請求工具實例 詳解

    Spring boot 整合 Okhttp3 并封裝請求工具實例 詳解

    OkHttp作為一款成熟、穩(wěn)定、易用的HTTP客戶端庫,擁有較高的性能和多樣化的功能,已被廣泛應用于移動應用開發(fā)、Web服務端開發(fā)等領域,這篇文章主要介紹了Spring boot 整合 Okhttp3 并封裝請求工具,需要的朋友可以參考下
    2023-08-08

最新評論