簡體   English   中英

Java NIO路徑:從完整路徑獲取基本路徑?

[英]Java NIO Paths: getting the base path from a full path?

使用Java NIO Path對象:

  • 如果我有基本路徑b和相對路徑r ,要獲取完整路徑f我可以調用b.resolve(r)
  • 如果我有完整路徑f和基本路徑b ,則可以調用b.relativize(f)來獲得相對路徑r
  • 但是如果我有fr並想找到b怎么辦?

查看Path API,我看不到任何簡單/直接的解決方案。 我能想到的最好的辦法是同時遍歷fr getParent() ,直到r'為空/空,然后f'應該為b 但這似乎笨拙且效率低下。

我也嘗試了基於f.subpath()的解決方案,但是該方法剝離了根組件(例如C:\\ )。

要檢索基本路徑,可以通過將完整路徑和相對路徑之間的路徑元素之差fullPath.getNameCount() - relativePath.getNameCount()fullPath.getNameCount() - relativePath.getNameCount()作為開始索引0和結束索引來使用subpath()

例如 :

Path fullPath = Paths.get("C:/folder1/folder2/a/b/c.txt");
Path relativePath = Paths.get("b/c.txt");
Path basePath =  fullPath.getRoot().resolve(fullPath.subpath(0, fullPath.getNameCount() - relativePath.getNameCount()));
System.out.println("basePath=" + basePath);

輸出:

基本路徑= C:\\ folder1中\\文件夾2 \\一個

注意,因為Windows在其subpath()實現中不將帶有:的標記視為路徑元素,所以需要fullPath.getRoot().resolve()
因此,在實際示例中, C:\\絕不會由subpath()返回。
C:\\在Windows實施中被視為root組件。

作為一般說明,即使我們的應用程序在基於Unix的操作系統上運行,我們也應使其不依賴於操作系統。 JVM運行的操作系統將來可能會有所不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM