File Input Output Java

//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 fromElements = splitPath(fromPath);
    ArrayList 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 splitPath(String path) {
    ArrayList pathElements = new ArrayList();
    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;
  }
}