----- Original Message ----- From: "Wannheden, Knut" <[EMAIL PROTECTED]> Sent: Monday, July 28, 2003 12:33 PM
> I've noticed that the normalize(File) method in FileUtils requires that the > File to normalize is absolute. I was wondering what the reason is for this > reason. Would it be too complex to normalize a relative path on Windows > systems? > I do not know. > I think it makes perfectly sense to normalize a path like "./foo" into "foo" > or "foo/bar/.." into "foo". Even a path like "../foo" could be normalized > using the system property "user.dir", but it could also cause an Exception > to be thrown as the absolute path "/../foo" would (a Unix system would even > normalize that as "/foo"). > > The reason I'm askin is because I wanted to reuse the code in normalize > which handles ".." and "." path segments. But maybe I should copy and paste > instead. The best and most sure option is to factor out the lines of codes that you are interested in in a separate method, which would be called both by Normalize and by your specific code for VMS. I guess these are the lines you are interested in : these lines could be a method String resolvePath(String root, String path) Stack s = new Stack(); s.push(root); StringTokenizer tok = new StringTokenizer(path, File.separator); while (tok.hasMoreTokens()) { String thisToken = tok.nextToken(); if (".".equals(thisToken)) { continue; } else if ("..".equals(thisToken)) { if (s.size() < 2) { throw new BuildException("Cannot resolve path " + orig); } else { s.pop(); } } else { // plain component s.push(thisToken); } } StringBuffer sb = new StringBuffer(); for (int i = 0; i < s.size(); i++) { if (i > 1) { // not before the filesystem root and not after it, since root // already contains one sb.append(File.separatorChar); } sb.append(s.elementAt(i)); } path = sb.toString(); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]