最近公司的一个任务需要修改文件原来的绝对路径为相对路径,于是写了一个方法:
/**
* 由绝对路径获得相对路径(path2相对于path1的相对路径)
* @param path1 path1绝对路径
* @param path2 path2绝对路径
* @return 相对路径
* @throws Exception
* @author XXX
*/
public String getRelativePath(String path1,String path2)throws Exception{
StringBuffer RelativePath = new StringBuffer();
/**替换路径中的"/"为"\"*/
path1 = path1.replace("/", "\\");
path2 = path2.replace("/","\\");
/**将路径按"\"拆分为字符串数组*/
String[] strArray1 = path1.split("\\\\"); //将path1路径拆分为数组
String[] strArray2 = path2.split("\\\\"); //将path2路径拆分为数组
int i = 0;
/**比较两个绝对路径中相同的路径信息,并用i记录位置*/
for(i = 0; i < strArray1.length && i < strArray2.length ;i ++){
if(strArray1[i].equals(strArray2[i])){
continue;
}else{
break;
}
}
int j =i;
/**如果path2路径在path1路径下,则相对路径为直接获取i后面的路径信息*/
if(i == strArray1.length){
for(;i<strArray2.length;i++){
RelativePath.append("\\").append(strArray2[i]);
}
/**如果path2路径不在path1路径下,则相对路径为先添加回退路径然后添加i后面的路径信息*/
}else if(i < strArray1.length){
for(;i<strArray1.length;i++){
RelativePath.append("..\\"); //得到回退路径
}
for(;j<strArray2.length;j++){
RelativePath.append(strArray2[j]).append("\\"); //得到j后面的路径信息
}
RelativePath = RelativePath.deleteCharAt(RelativePath.length()-1); //去除最后的"\"符号
}
System.out.println("最后得到的相对路径"+RelativePath.toString());
return RelativePath.toString();
}