001 package jp.osdl.jbento2;
002
003 import java.io.File;
004
005 public class PathUtils {
006
007 public static String calculateRelativePath(File path1, File path2) {
008 String path1Str = formatPath(path1.getAbsolutePath());
009 String path2Str = formatPath(path2.getAbsolutePath());
010
011 int index = 0;
012 while (index < path2Str.length() && index < path1Str.length()
013 && path2Str.charAt(index) == path1Str.charAt(index)) {
014 index++;
015 }
016 path2Str = path2Str.substring(index);
017 path1Str = path1Str.substring(index);
018
019 StringBuffer result = new StringBuffer();
020 if (path1Str.length() != 0) {
021 for (int i = 0; i < path1Str.length(); i++) {
022 if (path1Str.charAt(i) == '/') {
023 result.append("../");
024 }
025 }
026 }
027 result.append(path2Str);
028 return result.toString();
029 }
030
031 public static String formatPath(String path) {
032 String result = path.replace(File.separatorChar, '/');
033 if (result.charAt(result.length() - 1) != '/'
034 && new File(path).isDirectory()) {
035 result = result + "/";
036 }
037 return result;
038 }
039
040 public static String basename(File f, String ext) {
041 String name = f.getName();
042 int i = name.lastIndexOf(ext);
043 if (i != -1) {
044 return name.substring(0, i);
045 } else {
046 return name;
047 }
048 }
049 }