import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import com.uuzz.frame.base.exception.ProcessPathException;
/**
*
* 类 名: PathUtils
* 描 述: 对于路径问题处理的工具类
* 作 者: Vv
* 创 建: 2012-11-29
* 版 本:
*
* 历 史: (版本) 作者 时间 注释
*/
public class PathUtil {
public static final String PATH_OLD_SPLIT = "\\\\";
public static final String PATH_OTHER_SPLIT = "//";
public static final String PATH_SPLIT = "/";
public static final String UPPER_PATH = "..";
public static final String PATH_HTML = "http://";
/**
*
* 描 述:追加目录
* 作 者:Vv
* 历 史: (版本) 作者 时间 注释
* @param parentPath 上级目录 如:D:/AA
* @param subPath 子目录 如:BB
* @return 以目录名结尾 如: D:/AA/BB
*/
public static String appendPath(String parentPath, String subPath){
if (StringUtils.isNotBlank(parentPath) && !parentPath.endsWith(PATH_SPLIT)) {
parentPath += PATH_SPLIT;
}
if (StringUtils.isNotBlank(subPath)) {
parentPath = parentPath + subPath;
}
return processPath(parentPath);
}
/**
*
* 描 述:根据当前路径获取目标路径的相对路径(传入参数为绝对路径)
* 算法: 1.将路径分割为文件名的数组
* 2.循环当前目录(currentPath)的文件名数组,分别与目标路径(targetPath)的文件数组里的同一位置(索引值i相同)比较
* 2a.如果同一索引值对应的文件夹名相同,则表示存在相对路径,循环继续(continue),直到一索引值对应的文件夹名不相同时,跳出循环
* 2b.如果两个路径的起始部分不一致,则表示不存在相对路径,返回目标路径
* 3.根据2中循环结束时的索引值,获取相对路径文件名的集合并组成String
* 作 者:Vv
* 历 史: (版本) 作者 时间 注释
* @param currentPath
* @param targetPath
* @return 存在相对路径,则返回相对路径;否则,返回目标路径
* @throws ProcessPathException
*/
public static String getRelativePath(String currentPath, String targetPath) throws ProcessPathException{
if(StringUtils.isBlank(currentPath) || StringUtils.isBlank(targetPath)){
throw new ProcessPathException("The currentPath or targetPath parameter is required and can't be null or blank.");
}
currentPath = processPath(currentPath);
targetPath = processPath(targetPath);
String[] cpNames = currentPath.split(PATH_SPLIT);
String[] tpNames = targetPath.split(PATH_SPLIT);
List<String> rpNames = new ArrayList<String>();
/**
* 2.循环当前目录(currentPath)的文件名数组,分别与目标路径(targetPath)的文件数组里的同一位置(索引值i相同)比较
* 2a.如果同一索引值对应的文件夹名相同,则表示存在相对路径,循环继续(continue),直到一索引值对应的文件夹名不相同时,跳出循环
* 2b.如果两个路径的起始部分不一致,则表示不存在相对路径,返回目标路径
*/
int i = 0;
for(i=0; i < cpNames.length; i++){
if(cpNames[i].equals(tpNames[i])){
continue;
}else if(i == 0){// 如果currentPath与targetPath的起始目录不相同,则说明不存在相对路径
break;
}else{
rpNames.add(UPPER_PATH);
break;
}
}
/**
* 3.根据2中循环结束时的索引值 "i",获取相对路径文件名的集合并组成String
*/
for(int j=i; j < tpNames.length;j++){
rpNames.add(tpNames[j]);
}
String relativePath = "";
for(String rp:rpNames){
relativePath = relativePath + rp + PATH_SPLIT;
}
return processPath(relativePath);
}
/**
*
* 描 述:处理路径问题
* 如:传入 ///localhost//uuzz/admin/main.action;
* 返回 /localhost/uuzz/admin/main.action
* 作 者:Vv
* 历 史: (版本) 作者 时间 注释
* @param path
* @return
*/
public static String processPath(String path){
path = path.replaceAll(PATH_OLD_SPLIT, PATH_SPLIT);
if(path.endsWith(PATH_SPLIT)){
path = path.substring(0, path.length()-1);
}
boolean isHttp = false;
if(path.startsWith(PATH_HTML)){
isHttp = true;
path = path.substring(PATH_HTML.length());
}
// 循环处理,将"//"替换为"/"
while(path.contains(PATH_OTHER_SPLIT)){
path = path.replaceAll(PATH_OTHER_SPLIT, PATH_SPLIT);
}
if(isHttp){
path = PATH_HTML + path;
}
return path;
}
public static void main(String[] args) {
//String path = "D:/project/.metadata/.plugins/org.eclipse.wst.server.core/";
//String path = "D:/project/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/conf/Catalina/localhost";
String path = "///localhost:8080//uuzz/admin/main.action";
String tpath = "D:/project/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/logs";
System.out.println(processPath(path));
//System.out.println(processPath(tpath));
try {
//System.out.println(getRelativePath(tpath,path));
System.out.println(path.substring(PATH_HTML.length()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
获取资源在不同系统下路径,拼接资源在不同系统下的路径。
- `PathUtils`:帮助处理Android系统的文件路径,如获取外部存储目录、缓存目录等,使得文件操作更加便捷。 7. 导出到Excel: - `ExcelUtils`:允许将数据导出为Excel格式,方便数据的导出和分析,尤其适用于数据...
web 项目中的各种工具类 Bean2MapUtil 实体bean的数据转到...PathUtils 获取路径工具 Pinyin4jUtil 提取汉字拼音的工具 StringUtil 字符转换类 UploadQueue 文件上传队列 UUIDGenerator UUID工具 XmlUtils XML读写工具
19. **文件路径处理工具类**:如`PathUtils`,处理文件路径,如`normalize()`规范化路径,`resolveSibling()`获取路径的兄弟路径。 20. **异常处理工具类**:如`ExceptionUtils`,提供异常的捕获、包装和处理,`...
- `PathUtils`:处理路径相关的操作,如获取绝对路径、检查路径是否存在、生成目录结构等。 4. **网络请求工具类**: - `HttpUtils`:封装了HTTP请求,如GET、POST、PUT等,可以处理超时、重试、JSON解析等。 5....
在处理文件路径时,可以使用PathUtils单元中的函数,如`ExtractFilePath`用于获取路径中的目录部分,`ExtractFileName`获取文件名,`ChangeFileExt`改变文件扩展名。这些工具函数使得处理复杂的路径字符串变得简单。...
10. **其他工具类**:除了以上提到的,还有`ClassPathUtils`用于处理类路径,`SystemUtils`提供了操作系统相关的属性查询,`VersionUtils`帮助处理版本号比较等。 在Java Web开发中,`commons-lang3-3.7`通常会被...
- ` FilenameUtils`和`PathUtils`: 提供了与文件名和路径相关的操作,例如获取扩展名、判断路径是否为绝对路径等。 2. **流处理**: - `IOUtils`: 这个类包含了许多静态方法,用于读取、写入、复制、关闭和检测流...
Apache Commons IO 是一个Java库,包含了大量用于处理输入/输出操作的工具类。这个源码包"commons-io-2.5-src"提供了该库的源代码,使得开发者能够深入理解其实现细节,对其进行定制或者扩展。Apache Commons IO库在...
3. 对路径进行校验,使用`PathUtils`等工具类来确保路径的有效性。 4. 当涉及到文件操作时,确保使用的是文件名而不是完整的路径,除非必要。 在开发过程中,使用断言、日志记录和单元测试可以帮助我们尽早发现这些...
6. **FilenameUtils** 和 **PathUtils**: 分别处理文件名和路径的转换和操作,例如获取文件扩展名,判断是否为绝对路径等。 Commons-io 还提供了对大文件处理的支持,比如分块读写,以及对文件和流的缓冲区管理。...
4. `FilenameUtils`和`PathUtils`:这两个类提供了处理文件名和路径的工具,包括分割、组合、规范化以及比较等操作。 5. `InputStreamReader`和`OutputStreamWriter`:这些类在处理字符流时非常有用,它们可以将...