/* * 文件名称: PathUtils.java * 版权信息: Copyright 2001-2011 ZheJiang Collaboration Data System Co., LTD. All right reserved. * ---------------------------------------------------------------------------------------------- * 修改历史: * ---------------------------------------------------------------------------------------------- * 修改原因: 新增 * 修改人员: LuoJingtian * 修改日期: 2011-12-20 * 修改内容: */ package com.mfh.comn.utils; import java.io.File; import java.net.URL; import java.util.HashSet; import java.util.Set; import org.apache.commons.lang3.StringUtils; /** * 路径工具类. 该类是假设工具类所在的cds-framework.jar一定位于${WebRoot}/WEB-INF/classes目录下. * @author <a href="mailto:luojt@zjcds.com">LuoJingtian</a> created on 2011-12-20 * @since SHK Framework 1.0 */ public class PathUtils { private static Set<Character> invalidChar = new HashSet<Character>(); static { //invalidChar.add('\\'); //invalidChar.add('/'); //invalidChar.add(':'); invalidChar.add('*'); invalidChar.add('"'); invalidChar.add('<'); invalidChar.add('>'); invalidChar.add('|'); invalidChar.add(' '); invalidChar.add('\t'); } /** * 判断两个目录参数是否互指向同一个路径下(一个路径包含另一个路径也认为指向同一个路径). * * @param path1 目录1 * @param path2 目录2 * * @return * @author LuoJingtian created on 2012-2-22 * @since DE 6.0 */ public static boolean isSamePath(String path1, String path2) { // 路径预处理, 替换路径分隔符为统一的"/", trim头尾空格, 统一转为小写字母 path1 = trimEndFileSeparator(path1).toLowerCase(); path2 = trimEndFileSeparator(path2).toLowerCase(); // 如果两个目录的父目录相同: 两个路径不同, 不是同一个路径; 否则是同一个路径 String path1Parent = new File(path1).getParent(); String path2Parent = new File(path2).getParent(); if (path1Parent != null && path1Parent.equals(path2Parent)) { return path1.equals(path2); } // 如果两个目录互不包含, 不是同一个路径 if (!path1.contains(path2) && !path2.contains(path1)) { return false; } // 如果一个路径包含另一个路径, 指向同一个路径 if (path1.replace(path2, path1).equals(path1) || path2.replace(path1, path2).equals(path2)) { return true; } return false; } public static boolean isEqualsPath(String path1, String path2) { path1 = trimEndFileSeparator(path1).toLowerCase(); path2 = trimEndFileSeparator(path2).toLowerCase(); return path1.equals(path2); } public static boolean isNotEqualsPath(String path1, String path2) { return !isEqualsPath(path1, path2); } /** * 路径预处理, 替换路径分隔符为统一的"/", trim头尾空格, 如果路径不以"/"开头, 则添加"/" * * @param path 目录路径 * @return 预处理后的目录路径 * @author LuoJingtian created on 2012-2-22 * @since DE 6.0 */ public static String appendBeginFileSeparator(String path) { String afterPath = replacePathSeparator(path); if (!afterPath.startsWith("/")) { afterPath = "/" + afterPath; } return afterPath; } /** * 路径预处理, 替换路径分隔符为统一的"/", trim头尾空格, 截去开头的"/" * * @param path 目录路径 * @return 预处理后的目录路径 * @author LuoJingtian created on 2012-2-22 * @since DE 6.0 */ public static String trimBeginFileSeparator(String path) { String afterPath = replacePathSeparator(path); while (afterPath.startsWith("/")) { afterPath = afterPath.substring(1); } return afterPath; } /** * 路径预处理, 替换路径分隔符为统一的"/", trim头尾空格, 如果路径不以"/"结尾, 则追加"/" * * @param path 目录路径 * @return 预处理后的目录路径 * @author LuoJingtian created on 2012-2-22 * @since DE 6.0 */ public static String appendEndFileSeparator(String path) { String afterPath = replacePathSeparator(path); if (!afterPath.endsWith("/")) { afterPath = afterPath + "/"; } return afterPath; } /** * 路径预处理, 替换路径分隔符为统一的"/", trim头尾空格, 截去末尾的"/" * * @param path 目录路径 * @return 预处理后的目录路径 * @author LuoJingtian created on 2012-2-22 * @since DE 6.0 */ public static String trimEndFileSeparator(String path) { String afterPath = replacePathSeparator(path); while (afterPath.endsWith("/")) { afterPath = afterPath.substring(0, afterPath.length() - 1); } return afterPath; } public static String replacePathSeparator(String path) { return path.trim().replaceAll("\\\\", "/"); } /** * 判断指定路径是否包含非法字符 * @param path 路径 * @return * @author LuoJingtian created on 2012-2-22 * @since DE 6.0 */ public static boolean containsInvalidCharacter(String path) { char[] charArray = path.trim().toCharArray(); for (int i = 0; i < charArray.length; i++) { if (invalidChar.contains(charArray[i])) { return true; } } return false; } /** * 获取ClassPath路径 * @return ClassPath路径 * @author LuoJingtian created on 2011-12-20 * @since SHK Framework 1.0 */ public static String getClassPath() { URL url = PathUtils.class.getResource("/"); if (url == null) return null; String path = url.getPath(); return path; } /** * 获取WebInf路径 * @return WebInf路径 * @author LuoJingtian created on 2011-12-20 * @since SHK Framework 1.0 */ public static String getWebInfPath() { String clsPath = getClassPath(); if (clsPath == null) return null; return StringUtils.substringBeforeLast(StringUtils.substringBeforeLast(clsPath, "/"), "/"); } /** * 获取WebInf路径 * @return WebInf路径 * @author LuoJingtian created on 2011-12-20 * @since SHK Framework 1.0 */ public static String getWebRootPath() { String webPath = getWebInfPath(); if (webPath == null) return null; return StringUtils.substringBeforeLast(webPath, "/"); } }