给定两个绝对路径,例如:
/var/data/stuff/xyz.dat
/var/data
如何创建一个相对路径,以第二个路径为基础?在上面的例子中,结果应该是:./stuff/xyz.dat
给定两个绝对路径,例如:
/var/data/stuff/xyz.dat
/var/data
如何创建一个相对路径,以第二个路径为基础?在上面的例子中,结果应该是:./stuff/xyz.dat
org.apache.ant有一个FileUtils类,其中包含一个getRelativePath方法。我自己还没有尝试过,但检查一下可能是值得的。
http://javadoc.haefelinger.it/org.apache.ant/1.7.1/org/apache/tools/ant/util/FileUtils.html#getRelativePath(java.io.File, java.io.File)
private String relative(String left, String right){
String[] lefts = left.split("/");
String[] rights = right.split("/");
int min = Math.min(lefts.length, rights.length);
int commonIdx = -1;
for(int i = 0; i < min; i++){
if(commonIdx < 0 && !lefts[i].equals(rights[i])){
commonIdx = i - 1;
break;
}
}
if(commonIdx < 0){
return null;
}
StringBuilder sb = new StringBuilder(Math.max(left.length(), right.length()));
sb.append(left).append("/");
for(int i = commonIdx + 1; i < lefts.length;i++){
sb.append("../");
}
for(int i = commonIdx + 1; i < rights.length;i++){
sb.append(rights[i]).append("/");
}
return sb.deleteCharAt(sb.length() -1).toString();
}
伪代码:
return "." + whicheverPathIsLonger.substring(commonPath.length);