package railo.commons.io;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
/**
* Helper methods for file objects
*/
public final class FileUtil {
/**
* Field <code>FILE_SEPERATOR</code>
*/
public static final char FILE_SEPERATOR=File.separatorChar;
/**
* Field <code>FILE_ANTI_SEPERATOR</code>
*/
public static final char FILE_ANTI_SEPERATOR=(FILE_SEPERATOR=='/')?'\\':'/';
/**
* Field <code>TYPE_DIR</code>
*/
public static final short TYPE_DIR=0;
/**
* Field <code>TYPE_FILE</code>
*/
public static final short TYPE_FILE=1;
/**
* Field <code>LEVEL_FILE</code>
*/
public static final short LEVEL_FILE=0;
/**
* Field <code>LEVEL_PARENT_FILE</code>
*/
public static final short LEVEL_PARENT_FILE=1;
/**
* Field <code>LEVEL_GRAND_PARENT_FILE</code>
*/
public static final short LEVEL_GRAND_PARENT_FILE=2;
/**
* create a file from path
* @param path
* @return new File Object
*/
public static File toFile(String path) {
return new File(path.replace(FILE_ANTI_SEPERATOR,FILE_SEPERATOR));
}
/**
* create a File from parent file and string
* @param parent
* @param path
* @return new File Object
*/
public static File toFile(File parent, String path) {
return new File(parent,path.replace(FILE_ANTI_SEPERATOR,FILE_SEPERATOR));
}
/**
* create a File from parent file and string
* @param parent
* @param path
* @return new File Object
*/
public static File toFile(String parent, String path) {
return new File(
parent.replace(FILE_ANTI_SEPERATOR,FILE_SEPERATOR),
path.replace(FILE_ANTI_SEPERATOR,FILE_SEPERATOR));
}
/* *
* create a file object from a file object (parent) and realpath, in difference to the same constructor
* of the File Object this method ignore the diffrent path seperators on the different plattforms
* @param parent
* @param realpath
* @return new FIle Object matching on arguments
* /
public static File toFile2(File parent, String realpath) {
realpath=realpath.replace(FILE_ANTI_SEPERATOR,FILE_SEPERATOR);
while(realpath.startsWith("../")) {
parent=parent.getParentFile();
realpath=realpath.substring(3);
}
if(realpath.startsWith("./")) realpath=realpath.substring(2);
return FileUtil.toFile(parent,realpath);
}*/
/**
* translate a URL to a File Object
* @param url
* @return matching file object
* @throws MalformedURLException
*/
public static final File URLToFile(URL url) throws MalformedURLException {
if (!"file".equals(url.getProtocol()))
throw new MalformedURLException("URL protocol must be 'file'.");
return new File(URIToFilename(url.getFile()));
}
/**
* Fixes a platform dependent filename to standard URI form.
* @param str The string to fix.
* @return Returns the fixed URI string.
*/
public static final String URIToFilename(String str) {
// Windows fix
if (str.length() >= 3) {
if (str.charAt(0) == '/' && str.charAt(2) == ':') {
char ch1 = Character.toUpperCase(str.charAt(1));
if (ch1 >= 'A' && ch1 <= 'Z') str = str.substring(1);
}
}
// handle platform dependent strings
str = str.replace('/', java.io.File.separatorChar);
return str;
}
}