----- 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]

Reply via email to