/*
* $Id: PathUtils.java,v 1.4 2002/09/16 08:05:07 jkl Exp $
*
* Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
*
* Use is subject to license terms, as defined in
* Anvil Sofware License, Version 1.1. See LICENSE
* file, or http://njet.org/license-1.1.txt
*/
package anvil.util;
import java.util.StringTokenizer;
/**
* PathUtils
*
* @author: Jani Lehtimki
*/
public class PathUtils
{
public static final String mergePaths(String path1, String path2)
{
int length = path2.length();
if ((length > 2) && (path2.charAt(1) == ':')) {
path2 = path2.substring(2);
}
if (path2.startsWith("/")) {
return normalizePath(path2);
} else {
if (path1.endsWith("/")) {
return normalizePath(path1 + path2);
} else {
int i = path1.lastIndexOf('/');
if (i>=0) {
return normalizePath(path1.substring(0, i+1) + path2);
} else {
return normalizePath(path1 + path2);
}
}
}
}
public static final String normalizePath(String path)
{
boolean endslash = path.endsWith("/");
StringTokenizer tokenizer = new StringTokenizer(path, "/");
int n = tokenizer.countTokens();
String[] parts = new String[n];
int max = 0;
while(tokenizer.hasMoreTokens()) {
String part = tokenizer.nextToken();
if (part.equals("..")) {
if (max > 0) {
max --;
}
} else if (part.equals(".")) {
//skip
} else {
parts[max++] = part;
}
}
StringBuffer buffer = new StringBuffer(path.length());
for(int i=0; i<max; i++) {
buffer.append('/');
buffer.append(parts[i]);
}
if (endslash) {
buffer.append('/');
}
return buffer.toString();
}
}
|