Mercurial > dive4elements > river
view flys-backend/src/main/java/de/intevation/flys/utils/FileTools.java @ 508:a9c7f6ec3a5a 2.3.1
merged flys-backend/2.3.1
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:14:12 +0200 |
parents | 31895d24387e |
children | c7370734b872 |
line wrap: on
line source
package de.intevation.flys.utils; import java.io.File; import java.util.Stack; import org.apache.log4j.Logger; public class FileTools { private static Logger log = Logger.getLogger(FileTools.class); private FileTools() { } public static File repair(File file) { file = file.getAbsoluteFile(); if (file.exists()) { return file; } Stack<String> parts = new Stack<String>(); File curr = file; while (curr != null) { String name = curr.getName(); if (name.length() > 0) { parts.push(curr.getName()); } curr = curr.getParentFile(); } curr = null; OUTER: while (!parts.isEmpty()) { String f = parts.pop(); log.debug("fixing: '" + f + "'"); if (curr == null) { // XXX: Not totaly correct because there // more than one root on none unix systems. for (File root: File.listRoots()) { File [] files = root.listFiles(); if (files == null) { log.warn("cannot list '" + root); continue; } for (File candidate: files) { if (candidate.getName().equalsIgnoreCase(f)) { curr = new File(root, candidate.getName()); continue OUTER; } } } break; } else { File [] files = curr.listFiles(); if (files == null) { log.warn("cannot list: '" + curr + "'"); return file; } for (File candidate: files) { if (candidate.getName().equalsIgnoreCase(f)) { curr = new File(curr, candidate.getName()); continue OUTER; } } curr = null; break; } } if (curr == null) { log.warn("cannot repair path '" + file + "'"); return file; } return curr; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :