Mega Code Archive

 
Categories / Java / File Input Output
 

Get relative Path

//package xcordion.util; import java.io.File; import java.util.ArrayList; import java.util.StringTokenizer; public class FileUtils {   static public String relativePath(File from, File to) {     return relativePath(from, to, File.separatorChar);   }   static public String relativePath(File from, File to, char separatorChar) {     String fromPath = from.getAbsolutePath();     String toPath = to.getAbsolutePath();     boolean isDirectory = from.isDirectory();     return relativePath(fromPath, toPath, isDirectory, separatorChar);   }   public static String relativePath(String fromPath, String toPath,       boolean fromIsDirectory, char separatorChar) {     ArrayList<String> fromElements = splitPath(fromPath);     ArrayList<String> toElements = splitPath(toPath);     while (!fromElements.isEmpty() && !toElements.isEmpty()) {       if (!(fromElements.get(0).equals(toElements.get(0)))) {         break;       }       fromElements.remove(0);       toElements.remove(0);     }     StringBuffer result = new StringBuffer();     for (int i = 0; i < fromElements.size() - (fromIsDirectory ? 0 : 1); i++) {       result.append("..");       result.append(separatorChar);     }     for (String s : toElements) {       result.append(s);       result.append(separatorChar);     }     return result.substring(0, result.length() - 1);   }   private static ArrayList<String> splitPath(String path) {     ArrayList<String> pathElements = new ArrayList<String>();     for (StringTokenizer st = new StringTokenizer(path, File.separator); st         .hasMoreTokens();) {       String token = st.nextToken();       if (token.equals(".")) {         // do nothing       } else if (token.equals("..")) {         if (!pathElements.isEmpty()) {           pathElements.remove(pathElements.size() - 1);         }       } else {         pathElements.add(token);       }     }     return pathElements;   } }