最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java獲取文件路徑的幾種方式匯總

 更新時(shí)間:2026年04月29日 08:40:59   作者:北風(fēng)toto  
本文介紹了使用Java處理文件路徑的方法,包括使用java.io.File、java.nio.file.Paths類處理本地文件和類路徑資源,以及在Web應(yīng)用中獲取路徑的方法,它還提供了最佳實(shí)踐和注意事項(xiàng),如使用現(xiàn)代化的路徑處理方式和跨平臺(tái)兼容性,需要的朋友可以參考下

使用java.io.File類

File類是Java中最傳統(tǒng)、最常用的文件路徑操作類。它提供了一系列方法來(lái)獲取路徑的不同形式。

核心方法對(duì)比

  • getPath(): 返回構(gòu)造File對(duì)象時(shí)傳入的路徑字符串。如果是相對(duì)路徑,則返回相對(duì)路徑;如果是絕對(duì)路徑,則返回絕對(duì)路徑。
  • getAbsolutePath(): 返回文件的絕對(duì)路徑。如果File對(duì)象是用相對(duì)路徑創(chuàng)建的,該方法會(huì)將其解析為相對(duì)于當(dāng)前工作目錄的完整路徑。
  • getCanonicalPath(): 返回文件的規(guī)范路徑。這是最“真實(shí)”的絕對(duì)路徑,它會(huì)解析掉路徑中的符號(hào)鏈接(Symbolic Link)以及.(當(dāng)前目錄)和..(父目錄)等冗余部分。此方法會(huì)拋出IOException。

代碼示例

import java.io.File;
import java.io.IOException;

public class FilePathDemo {
    public static void main(String[] args) throws IOException {
        // 1. 使用相對(duì)路徑創(chuàng)建File對(duì)象
        File relativeFile = new File("data/config.properties");
        System.out.println("=== 相對(duì)路徑示例 ===");
        System.out.println("getPath(): " + relativeFile.getPath());
        System.out.println("getAbsolutePath(): " + relativeFile.getAbsolutePath());
        System.out.println("getCanonicalPath(): " + relativeFile.getCanonicalPath());

        // 2. 使用包含".."的相對(duì)路徑
        File complexRelativeFile = new File("./src/../data/config.properties");
        System.out.println("\n=== 復(fù)雜相對(duì)路徑示例 ===");
        System.out.println("getPath(): " + complexRelativeFile.getPath());
        System.out.println("getAbsolutePath(): " + complexRelativeFile.getAbsolutePath());
        System.out.println("getCanonicalPath(): " + complexRelativeFile.getCanonicalPath());

        // 3. 使用絕對(duì)路徑創(chuàng)建File對(duì)象
        File absoluteFile = new File("C:\\Users\\Public\\data\\config.properties"); // Windows路徑示例
        System.out.println("\n=== 絕對(duì)路徑示例 ===");
        System.out.println("getPath(): " + absoluteFile.getPath());
        System.out.println("getAbsolutePath(): " + absoluteFile.getAbsolutePath());
        System.out.println("getCanonicalPath(): " + absoluteFile.getCanonicalPath());
        
        // 獲取父路徑和文件名
        System.out.println("\n=== 路徑元素獲取 ===");
        System.out.println("父路徑: " + relativeFile.getParent());
        System.out.println("文件名: " + relativeFile.getName());
    }
}

輸出示例 (假設(shè)當(dāng)前工作目錄為 D:\myproject)

=== 相對(duì)路徑示例 ===
getPath(): data\config.properties
getAbsolutePath(): D:\myproject\data\config.properties
getCanonicalPath(): D:\myproject\data\config.properties

=== 復(fù)雜相對(duì)路徑示例 ===
getPath(): .\src\..\data\config.properties
getAbsolutePath(): D:\myproject\.\src\..\data\config.properties
getCanonicalPath(): D:\myproject\data\config.properties

=== 絕對(duì)路徑示例 ===
getPath(): C:\Users\Public\data\config.properties
getAbsolutePath(): C:\Users\Public\data\config.properties
getCanonicalPath(): C:\Users\Public\data\config.properties

=== 路徑元素獲取 ===
父路徑: data
文件名: config.properties

使用java.nio.file.Paths類 (Java 7+)

從Java 7開(kāi)始,java.nio.file包引入了新的文件I/O API,其中Paths類提供了一種更現(xiàn)代、更簡(jiǎn)潔的方式來(lái)處理路徑。

核心方法

  • Paths.get(String first, String... more): 用于將路徑字符串轉(zhuǎn)換為Path對(duì)象。它可以接受多個(gè)字符串參數(shù)來(lái)拼接路徑,自動(dòng)使用當(dāng)前操作系統(tǒng)的文件分隔符。
  • toAbsolutePath(): Path對(duì)象的方法,用于獲取絕對(duì)路徑。
  • toRealPath(): Path對(duì)象的方法,類似于File.getCanonicalPath(),用于獲取規(guī)范路徑,會(huì)解析符號(hào)鏈接。

代碼示例

import java.nio.file.Path;
import java.nio.file.Paths;
import java.io.IOException;

public class NioPathDemo {
    public static void main(String[] args) throws IOException {
        // 1. 創(chuàng)建Path對(duì)象
        Path path = Paths.get("data", "config.properties");
        System.out.println("Path對(duì)象: " + path);

        // 2. 獲取絕對(duì)路徑
        Path absolutePath = path.toAbsolutePath();
        System.out.println("絕對(duì)路徑: " + absolutePath);

        // 3. 獲取規(guī)范路徑 (解析符號(hào)鏈接)
        Path realPath = path.toRealPath();
        System.out.println("規(guī)范路徑: " + realPath);
        
        // 4. 路徑拼接
        Path basePath = Paths.get("D:", "projects");
        Path fullPath = basePath.resolve("myapp/config.properties");
        System.out.println("拼接后的路徑: " + fullPath);
    }
}

使用ClassLoader獲取類路徑資源

當(dāng)你的文件(如配置文件、圖片等)被打包在JAR文件或位于src/main/resources目錄下時(shí),它們屬于“類路徑”資源。此時(shí),使用File類是無(wú)法直接訪問(wèn)的,必須通過(guò)ClassLoader

核心方法

  • Class.getResourceAsStream(String name): 獲取類路徑下資源的輸入流。以/開(kāi)頭的路徑表示從類路徑的根目錄開(kāi)始查找。
  • ClassLoader.getResourceAsStream(String name): 與上面類似,但路徑不以/開(kāi)頭,默認(rèn)從類路徑根目錄開(kāi)始。

代碼示例

假設(shè)config.properties文件位于src/main/resources目錄下。

import java.io.InputStream;
import java.util.Properties;

public class ResourceLoader {
    public static void main(String[] args) throws Exception {
        // 方法1: 使用Class.getResourceAsStream
        // 路徑以 "/" 開(kāi)頭,表示從類路徑根目錄查找
        InputStream inputStream1 = ResourceLoader.class.getResourceAsStream("/config.properties");
        
        // 方法2: 使用ClassLoader.getResourceAsStream
        // 路徑不以 "/" 開(kāi)頭,同樣從類路徑根目錄查找
        InputStream inputStream2 = ResourceLoader.class.getClassLoader().getResourceAsStream("config.properties");

        if (inputStream1 != null) {
            Properties props = new Properties();
            props.load(inputStream1);
            System.out.println("成功加載配置: " + props.getProperty("app.name"));
            inputStream1.close();
        }
    }
}

使用System屬性獲取系統(tǒng)路徑

System.getProperty()方法可以獲取一些與系統(tǒng)和用戶相關(guān)的關(guān)鍵路徑。

常用屬性

  • user.dir: 獲取當(dāng)前Java虛擬機(jī)的工作目錄,即你啟動(dòng)Java程序時(shí)所在的目錄。
  • user.home: 獲取當(dāng)前用戶的主目錄(例如,Windows下的C:\Users\用戶名)。
  • java.home: 獲取Java的安裝目錄(即JRE或JDK的路徑)。

代碼示例

public class SystemPathDemo {
    public static void main(String[] args) {
        System.out.println("當(dāng)前工作目錄: " + System.getProperty("user.dir"));
        System.out.println("用戶主目錄: " + System.getProperty("user.home"));
        System.out.println("Java安裝目錄: " + System.getProperty("java.home"));
    }
}

Web應(yīng)用中的路徑獲取 (Servlet/JSP)

在Web應(yīng)用中,路徑的概念更為復(fù)雜,分為客戶端路徑和服務(wù)器端路徑。

核心方法

  • request.getSession().getServletContext().getRealPath("/"): 獲取Web應(yīng)用在服務(wù)器文件系統(tǒng)中的部署根目錄的絕對(duì)路徑。這是獲取服務(wù)器端物理路徑最常用的方法。
  • request.getContextPath(): 獲取Web應(yīng)用的上下文路徑(即項(xiàng)目名),這是一個(gè)客戶端路徑,用于構(gòu)建URL。

代碼示例 (在Servlet中)

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class PathServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 獲取Web應(yīng)用在服務(wù)器上的物理根路徑
        String realPath = request.getSession().getServletContext().getRealPath("/");
        response.getWriter().println("服務(wù)器物理路徑: " + realPath);
        
        // 獲取應(yīng)用的上下文路徑 (例如 /myapp)
        String contextPath = request.getContextPath();
        response.getWriter().println("應(yīng)用上下文路徑: " + contextPath);
    }
}

總結(jié)與最佳實(shí)踐

為了幫助你更好地選擇合適的方法,以下是不同場(chǎng)景下的推薦做法:

場(chǎng)景推薦方法說(shuō)明
操作本地文件File.getCanonicalPath()Paths.get().toRealPath()獲取最真實(shí)、無(wú)歧義的絕對(duì)路徑,適用于文件讀寫(xiě)、刪除等操作。
加載類路徑資源ClassLoader.getResourceAsStream()讀取resources目錄或JAR包內(nèi)的配置文件、模板等。
獲取程序啟動(dòng)目錄System.getProperty("user.dir")確定相對(duì)路徑的基準(zhǔn),常用于日志文件、臨時(shí)文件的創(chuàng)建。
Web應(yīng)用獲取物理路徑ServletContext.getRealPath("/")在服務(wù)器端獲取Web應(yīng)用的部署目錄,用于上傳文件等操作。
路徑拼接Paths.get(parent, child)比字符串拼接更安全、可讀性更高,且能自動(dòng)處理不同操作系統(tǒng)的路徑分隔符。

注意事項(xiàng)

  • 路徑分隔符: 在不同操作系統(tǒng)上,路徑分隔符不同(Windows為\,Linux/Unix為/)。建議使用File.separatorPaths.get()來(lái)保證跨平臺(tái)兼容性。
  • 異常處理: getCanonicalPath()toRealPath()等方法可能會(huì)拋出IOException,需要進(jìn)行妥善處理。
  • 相對(duì)路徑的基準(zhǔn): 相對(duì)路徑是相對(duì)于“當(dāng)前工作目錄”的,這個(gè)目錄在IDE中運(yùn)行和在命令行中運(yùn)行java -jar時(shí)可能不同,需要注意。

以上就是Java獲取文件路徑的幾種方式匯總的詳細(xì)內(nèi)容,更多關(guān)于Java獲取文件路徑的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring配置文件無(wú)法讀取properties屬性的解決

    Spring配置文件無(wú)法讀取properties屬性的解決

    這篇文章主要介紹了Spring配置文件無(wú)法讀取properties屬性的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • JVM工作原理和工作流程簡(jiǎn)述

    JVM工作原理和工作流程簡(jiǎn)述

    這篇文章主要介紹了關(guān)于JVM工作原理簡(jiǎn)述,主要弄清楚jvm運(yùn)行的來(lái)龍去脈,感興趣的可以一起來(lái)了解一下
    2020-07-07
  • 使用SpringBoot創(chuàng)建一個(gè)RESTful API的詳細(xì)步驟

    使用SpringBoot創(chuàng)建一個(gè)RESTful API的詳細(xì)步驟

    使用 Java 的 Spring Boot 創(chuàng)建 RESTful API 可以滿足多種開(kāi)發(fā)場(chǎng)景,它提供了快速開(kāi)發(fā)、易于配置、可擴(kuò)展、可維護(hù)的優(yōu)點(diǎn),尤其適合現(xiàn)代軟件開(kāi)發(fā)的需求,幫助你快速構(gòu)建出高性能的后端服務(wù),需要的朋友可以參考下
    2025-01-01
  • Java中Long類型傳入前端數(shù)值出錯(cuò)問(wèn)題

    Java中Long類型傳入前端數(shù)值出錯(cuò)問(wèn)題

    這篇文章主要介紹了Java中Long類型傳入前端數(shù)值出錯(cuò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • SpringBoot過(guò)濾器的使用

    SpringBoot過(guò)濾器的使用

    過(guò)濾器是對(duì)數(shù)據(jù)進(jìn)行過(guò)濾,預(yù)處理過(guò)程,當(dāng)我們?cè)L問(wèn)網(wǎng)站時(shí),有時(shí)候會(huì)發(fā)布一些敏感信息,發(fā)完以后有的會(huì)用*替代,還有就是登陸權(quán)限控制等,一個(gè)資源,沒(méi)有經(jīng)過(guò)授權(quán),肯定是不能讓用戶隨便訪問(wèn)的,這個(gè)時(shí)候,也可以用到過(guò)濾器,需要的朋友可以參考一下
    2021-11-11
  • 使用Java和SpringBoot實(shí)現(xiàn)服務(wù)器發(fā)送事件(Server-Sent Events)

    使用Java和SpringBoot實(shí)現(xiàn)服務(wù)器發(fā)送事件(Server-Sent Events)

    使用Java開(kāi)發(fā)web應(yīng)用,大多數(shù)時(shí)候我們提供的接口返回?cái)?shù)據(jù)都是一次性完整返回,有些時(shí)候,我們也需要提供流式接口持續(xù)寫(xiě)出數(shù)據(jù),以下提供一種簡(jiǎn)單的方式,本文給大家介紹了如何在Java web中實(shí)現(xiàn)服務(wù)器發(fā)送事件,需要的朋友可以參考下
    2024-02-02
  • Java for循環(huán)常見(jiàn)優(yōu)化方法案例詳解

    Java for循環(huán)常見(jiàn)優(yōu)化方法案例詳解

    這篇文章主要介紹了Java for循環(huán)常見(jiàn)優(yōu)化方法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 基于Flyway實(shí)現(xiàn)簡(jiǎn)化Spring Boot項(xiàng)目部署

    基于Flyway實(shí)現(xiàn)簡(jiǎn)化Spring Boot項(xiàng)目部署

    這篇文章主要介紹了基于Flyway實(shí)現(xiàn)簡(jiǎn)化Spring Boot項(xiàng)目部署,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • MyBatis如何通過(guò)xml方式實(shí)現(xiàn)SaveOrUpdate

    MyBatis如何通過(guò)xml方式實(shí)現(xiàn)SaveOrUpdate

    這篇文章主要講如何通過(guò)xml方式實(shí)現(xiàn)SaveOrUpdate,但是仍然建議在Service中實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-06-06
  • SpringBoot中支持Https協(xié)議的實(shí)現(xiàn)

    SpringBoot中支持Https協(xié)議的實(shí)現(xiàn)

    本文主要介紹了SpringBoot中支持Https協(xié)議的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評(píng)論

宁武县| 东至县| 团风县| 巴中市| 罗源县| 普兰店市| 吴堡县| 普宁市| 恩平市| 迁西县| 禹州市| 拜泉县| 武冈市| 湟源县| 北京市| 盱眙县| 永善县| 黎城县| 扎兰屯市| 额敏县| 德州市| 油尖旺区| 耒阳市| 汉寿县| 四川省| 昭通市| 福海县| 塔城市| 阿瓦提县| 财经| 闽侯县| 滁州市| 洞头县| 巴彦淖尔市| 改则县| 峨眉山市| 比如县| 灵山县| 嘉鱼县| 铜陵市| 辉南县|