2012-03-22 294 views
2

這是一個看似簡單的問題,但我無法以乾淨的方式進行操作。我有一個文件路徑如下:從絕對路徑中提取相對路徑

/這/是/的/絕對/路徑/到/的/位置/ /我的/文件

我需要的是提取的/ /我的/文件從上面給出的路徑,因爲那是我的相對路徑。

我想這樣做是如下的方式:

String absolutePath = "/this/is/an/absolute/path/to/the/location/of/my/file"; 
String[] tokenizedPaths = absolutePath.split("/"); 
int strLength = tokenizedPaths.length; 
String myRelativePathStructure = (new StringBuffer()).append(tokenizedPaths[strLength-3]).append("/").append(tokenizedPaths[strLength-2]).append("/").append(tokenizedPaths[strLength-1]).toString(); 

這可能會爲我的迫切需求,但可有人建議從Java中的提供的路徑提取子路徑的更好的辦法?

感謝

+0

您必須知道根路徑的樣子或「子」路徑的樣子。 – Kiril 2012-03-22 16:48:59

回答

10

使用URI class

URI base = URI.create("/this/is/an/absolute/path/to/the/location"); 
URI absolute =URI.create("/this/is/an/absolute/path/to/the/location/of/my/file"); 
URI relative = base.relativize(absolute); 

這將導致of/my/file

+0

謝謝。我想知道是否有辦法更好地控制相關性。是否有可能以類似的優雅方式抓取/位置/我的/文件? – 2012-03-22 18:59:23

+0

@sc_ray - 是的,更改您的基本URI。 – jtahlborn 2012-03-22 19:34:47

+0

@sc_ray查看'File'的[getParentFile](http://docs.oracle.com/javase/7/docs/api/java/io/File.html#getParentFile%28%29)方法。 'File'包含轉換爲/從'URI'實例的方法。 Java 7用戶_might_能夠使用[java.nio.file]中的'Path'類型(http://docs.oracle.com/javase/7/docs/api/java/nio/file/package-summary .html)包 - 我沒有深入地看過它。 – McDowell 2012-03-23 09:02:58

1

純字符串操作,並假設你知道的基本路徑,並假設你只需要基本路徑下的相對路徑,從來沒有在前面加上「../」系列:

String basePath = "/this/is/an/absolute/path/to/the/location/"; 
String absolutePath = "/this/is/an/absolute/path/to/the/location/of/my/file"; 
if (absolutePath.startsWith(basePath)) { 
    relativePath = absolutePath.substring(basePath.length()); 
} 

有切實地更好的方法儘管如此,請使用知道路徑邏輯的類來執行此操作,例如FileURI。 :)