[英]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
。 f
和r
並想找到b
怎么辦? 查看Path
API,我看不到任何簡單/直接的解決方案。 我能想到的最好的辦法是同時遍歷f
和r
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.