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

Java?IO?API實(shí)現(xiàn)獲取路徑信息并去除冗余信息

 更新時(shí)間:2026年03月19日 08:52:46   作者:Cache技術(shù)分享  
這篇文章主要為大家詳細(xì)介紹了Java?IO?API實(shí)現(xiàn)獲取路徑信息并去除冗余信息,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

Java IO API - 獲取路徑信息

Path 可以被看作是存儲(chǔ)路徑名稱元素的序列。路徑結(jié)構(gòu)中的第一個(gè)元素位于索引 0,而最后一個(gè)元素位于索引 [n-1],其中 n 是路徑中元素的數(shù)量。Java 提供了多種方法來根據(jù)這些索引獲取單獨(dú)的元素或路徑的子序列。

示例目錄結(jié)構(gòu)

我們使用以下目錄結(jié)構(gòu)作為示例:

  • Windows: C:\home\joe\foo
  • Solaris: /home/joe/foo

基本路徑操作示例

下面的代碼示例定義了一個(gè) Path 實(shí)例,并調(diào)用了多個(gè)方法來獲取路徑的信息:

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

public class PathInfoExample {
    public static void main(String[] args) {
        // 創(chuàng)建一個(gè)路徑實(shí)例,Windows 路徑格式
        Path pathWindows = Paths.get("C:\\home\\joe\\foo");
        
        // 創(chuàng)建一個(gè)路徑實(shí)例,Solaris 路徑格式
        Path pathSolaris = Paths.get("/home/joe/foo");
        
        // 打印路徑的各種信息
        printPathInfo(pathWindows);
        printPathInfo(pathSolaris);
    }
    
    public static void printPathInfo(Path path) {
        System.out.format("toString: %s%n", path.toString());
        System.out.format("getFileName: %s%n", path.getFileName());
        System.out.format("getName(0): %s%n", path.getName(0));
        System.out.format("getNameCount: %d%n", path.getNameCount());
        System.out.format("subpath(0,2): %s%n", path.subpath(0, 2));
        System.out.format("getParent: %s%n", path.getParent());
        System.out.format("getRoot: %s%n", path.getRoot());
    }
}

方法與輸出說明

以下是 Path 對(duì)象方法的詳細(xì)解釋和在不同操作系統(tǒng)下的返回值:

方法Solaris 返回值Windows 返回值說明
toString()/home/joe/fooC:\home\joe\foo返回路徑的字符串表示。對(duì)于 UNIX 操作系統(tǒng),會(huì)修正路徑格式(例如 //home/joe/foo 會(huì)變?yōu)?/home/joe/foo)。
getFileName()foofoo返回路徑的文件名(或路徑中的最后一個(gè)元素)。
getName(0)homehome返回路徑中指定索引位置的元素。此處為路徑的第一個(gè)目錄元素。
getNameCount()33返回路徑中元素的數(shù)量。
subpath(0, 2)home/joehome\joe返回路徑的子序列(不包含根元素),從索引 0 到索引 2(不包括索引 2)。
getParent()/home/joe\home\joe返回路徑的父級(jí)目錄。
getRoot()/C:\返回路徑的根目錄。

相對(duì)路徑示例

下面是使用相對(duì)路徑時(shí)的代碼示例:

// Solaris 路徑格式
Path pathSolarisRelative = Paths.get("sally/bar");

// Windows 路徑格式
Path pathWindowsRelative = Paths.get("sally\\bar");

printPathInfo(pathSolarisRelative);
printPathInfo(pathWindowsRelative);

在 Solaris 和 Windows 中,輸出結(jié)果如下:

方法Solaris 返回值Windows 返回值
toString()sally/barsally\bar
getFileName()barbar
getName(0)sallysally
getNameCount()22
subpath(0, 1)sallysally
getParent()sallysally
getRoot()nullnull

解釋

  • toString(): 返回路徑的字符串表示。當(dāng)路徑包含相對(duì)目錄時(shí),toString() 將顯示相對(duì)路徑,如 sally/bar 或 sally\bar。
  • getFileName(): 返回路徑的最后一個(gè)部分(文件名或目錄名),在上述示例中是 bar。
  • getName(0): 返回路徑的第一個(gè)部分,這里是 sally。
  • getNameCount(): 返回路徑中元素的數(shù)量,顯示路徑中有多少級(jí)目錄或文件名。
  • subpath(0, 1): 返回從索引 0 到索引 1 之間的路徑子序列。
  • getParent(): 返回路徑的父級(jí)目錄,對(duì)于相對(duì)路徑,返回的是直接上級(jí)目錄。
  • getRoot(): 對(duì)于相對(duì)路徑,返回 null,因?yàn)橄鄬?duì)路徑?jīng)]有根目錄;對(duì)于絕對(duì)路徑,返回根目錄(如 / 或 C:\)。

Java IO API -去除路徑中的冗余信息

在文件系統(tǒng)中,有一些特殊的路徑標(biāo)記:

  • "." 表示當(dāng)前目錄(current directory)
  • ".." 表示父目錄(parent directory)

問題背景

你可能會(huì)遇到這樣的路徑:

/home/./joe/foo
/home/sally/../joe/foo

這些路徑雖然可以正常使用,但存在冗余部分:

  • ./ 實(shí)際上什么都沒改變
  • sally/.. 實(shí)際上回到了 sally 的上一級(jí)目錄,也就是去掉了 sally

我們希望清理這些冗余路徑,使其更簡潔、語義清晰。為此,Java 提供了 normalize() 方法。

normalize() 方法:清理路徑語法

normalize() 方法會(huì)純粹基于字符串結(jié)構(gòu)來移除路徑中的冗余部分,例如:

  • "./" 會(huì)被移除
  • "xxx/.." 會(huì)被刪除(包括 xxx..

注意:這個(gè)過程不會(huì)訪問實(shí)際文件系統(tǒng)!它只是語法層面的路徑清理。

示例代碼:

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

public class PathNormalizationExample {
    public static void main(String[] args) {
        Path path1 = Paths.get("/home/./joe/foo");
        Path path2 = Paths.get("/home/sally/../joe/foo");

        System.out.println("Original path1: " + path1);
        System.out.println("Normalized path1: " + path1.normalize());

        System.out.println("Original path2: " + path2);
        System.out.println("Normalized path2: " + path2.normalize());
    }
}

輸出結(jié)果:

Original path1: /home/./joe/foo
Normalized path1: /home/joe/foo

Original path2: /home/sally/../joe/foo
Normalized path2: /home/joe/foo

注意事項(xiàng):normalize() 是“語法清理”,不是“路徑驗(yàn)證”

雖然 normalize() 非常有用,但它**不會(huì)考慮符號(hào)鏈接(symbolic links)**或文件系統(tǒng)中的真實(shí)結(jié)構(gòu)。

比如:/home/sally -> /mnt/data/logs

如果你有路徑 /home/sally/../joe/foo,直接 normalize() 會(huì)變成 /home/joe/foo。但這時(shí)候,sally 實(shí)際是個(gè)鏈接,刪掉它可能指向了錯(cuò)誤的路徑!

更安全的方式:toRealPath()

如果希望在清理路徑的同時(shí)確認(rèn)文件或目錄真實(shí)存在且正確解析符號(hào)鏈接,請(qǐng)使用 toRealPath() 方法。

Path path = Paths.get("/home/sally/../joe/foo");
Path realPath = path.toRealPath(); // 會(huì)解析鏈接,并檢查文件存在性
  • 如果路徑不存在或無法解析,會(huì)拋出異常
  • 會(huì)返回標(biāo)準(zhǔn)化、絕對(duì)的、符號(hào)鏈接已解析的路徑

小結(jié)

方法功能說明是否訪問文件系統(tǒng)
normalize()清除路徑中的 "." 和 "../",只做語法層面簡化? 否
toRealPath()返回真實(shí)存在的路徑,解析符號(hào)鏈接并驗(yàn)證實(shí)際文件結(jié)構(gòu)? 是

總結(jié)

通過 Path 類提供的各種方法,您可以輕松獲取路徑的各個(gè)部分,包括文件名、父目錄、根目錄以及路徑元素的子序列。這些方法在處理路徑時(shí)非常有用,尤其是在需要處理跨平臺(tái)文件路徑的場(chǎng)景下。

到此這篇關(guān)于Java IO API實(shí)現(xiàn)獲取路徑信息并去除冗余信息的文章就介紹到這了,更多相關(guān)Java獲取路徑信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot切面實(shí)現(xiàn)token權(quán)限校驗(yàn)詳解

    SpringBoot切面實(shí)現(xiàn)token權(quán)限校驗(yàn)詳解

    這篇文章主要介紹了SpringBoot切面實(shí)現(xiàn)token權(quán)限校驗(yàn)詳解,要實(shí)現(xiàn)權(quán)限校驗(yàn),首先數(shù)據(jù)表和實(shí)體類上需要有權(quán)限字段,我的表中permission和gender是通過外鍵約束permission表和gender表實(shí)現(xiàn)枚舉的,因?yàn)榭赏卣剐愿?需要的朋友可以參考下
    2024-01-01
  • springboot對(duì)接第三方微信授權(quán)及獲取用戶的頭像和昵稱等等

    springboot對(duì)接第三方微信授權(quán)及獲取用戶的頭像和昵稱等等

    這篇文章主要介紹了springboot對(duì)接第三方微信授權(quán)及獲取用戶的頭像和昵稱等等,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • JAVA中使用JSON進(jìn)行數(shù)據(jù)傳遞示例

    JAVA中使用JSON進(jìn)行數(shù)據(jù)傳遞示例

    本篇文章主要介紹了JAVA中使用JSON進(jìn)行數(shù)據(jù)傳遞示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • 全面解讀Java?NIO(看這篇就夠了)

    全面解讀Java?NIO(看這篇就夠了)

    Java?NIO是Java1.4之后推出來的一套IO接口,NIO提供了一種完全不同的操作方式,?NIO支持面向緩沖區(qū)的、基于通道的IO操作,這篇文章主要介紹了Java?NIO詳解(看這篇就夠了),需要的朋友可以參考下
    2023-05-05
  • 一文盤點(diǎn)Java中常見內(nèi)存泄漏場(chǎng)景與解決方法

    一文盤點(diǎn)Java中常見內(nèi)存泄漏場(chǎng)景與解決方法

    內(nèi)存泄漏 是指對(duì)象 已經(jīng)不再被程序使用,但因?yàn)槟承┰?nbsp;無法被垃圾回收器回收,長期占用內(nèi)存,最終可能引發(fā)?OOM,本文會(huì)介紹常見的幾類內(nèi)存泄漏場(chǎng)景,大家可以避免一下
    2025-12-12
  • SpringBoot配置web訪問H2的方法

    SpringBoot配置web訪問H2的方法

    這篇文章主要介紹了SpringBoot配置web訪問H2的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • java同步與異步的學(xué)習(xí)筆記整理

    java同步與異步的學(xué)習(xí)筆記整理

    在本篇文章里小編給大家整理了關(guān)于java同步與異步的學(xué)習(xí)筆記整理內(nèi)容,需要的朋友們參考下。
    2020-02-02
  • spring中@SpringBootTest注解的實(shí)現(xiàn)

    spring中@SpringBootTest注解的實(shí)現(xiàn)

    SpringBootTest是SpringBoot集成測(cè)試核心注解,通過加載完整應(yīng)用上下文和配置,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • java獲取用戶輸入的字符串方法

    java獲取用戶輸入的字符串方法

    今天小編就為大家分享一篇java獲取用戶輸入的字符串方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 利用Kotlin + Spring Boot實(shí)現(xiàn)后端開發(fā)

    利用Kotlin + Spring Boot實(shí)現(xiàn)后端開發(fā)

    這篇文章主要給大家介紹了關(guān)于利用Kotlin + Spring Boot實(shí)現(xiàn)后端開發(fā)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11

最新評(píng)論

潍坊市| 华亭县| 汤原县| 特克斯县| 永善县| 澄江县| 卓尼县| 韩城市| 全南县| 吉木萨尔县| 遂平县| 铁岭县| 威信县| 巴林右旗| 民丰县| 梁平县| 绥化市| 蒲江县| 上高县| 盐源县| 景宁| 梅河口市| 百色市| 凤城市| 嘉鱼县| 孙吴县| 洞头县| 南丰县| 高青县| 郧西县| 郸城县| 修武县| 龙州县| 大新县| 德庆县| 慈利县| 杂多县| 上栗县| 集贤县| 盐山县| 台北县|