文章目录
-
-
- [PathNormalizer 工具类](#PathNormalizer 工具类)
-
属于基础问题,也整理下。
典型场景:
获取文件路径,拿到的是 d:\data\upload 然后代码中拼接的是/,这样存到库里乱七八糟。
PathNormalizer 工具类
java
import java.nio.file.Path;
import java.nio.file.Paths;
public class PathNormalizer {
/**
* 统一路径分隔符为正斜杠(推荐用于存储和显示)
*/
public static String normalizeToUnix(String path) {
if (path == null || path.isEmpty()) {
return path;
}
// 统一替换反斜杠为正斜杠
return path.replace('\\', '/')
.replaceAll("/+", "/"); // 合并多个斜杠
}
/**
* 统一为系统默认分隔符(用于文件系统操作)
*/
public static String normalizeToSystem(String path) {
if (path == null || path.isEmpty()) {
return path;
}
// 先统一为正斜杠,再转为系统分隔符
String normalized = normalizeToUnix(path);
return normalized.replace('/', File.separatorChar);
}
/**
* 安全拼接路径(所有输入先归一化)
*/
public static String join(String base, String... parts) {
if (base == null) {
return null;
}
// 归一化基础路径
String normalized = normalizeToUnix(base);
// 去除末尾斜杠
if (normalized.endsWith("/")) {
normalized = normalized.substring(0, normalized.length() - 1);
}
// 拼接每个部分
for (String part : parts) {
if (part == null || part.isEmpty()) {
continue;
}
// 归一化当前部分
String normalizedPart = normalizeToUnix(part);
// 去除开头斜杠
if (normalizedPart.startsWith("/")) {
normalizedPart = normalizedPart.substring(1);
}
normalized += "/" + normalizedPart;
}
return normalized;
}
/**
* 转换为 Path 对象(自动处理系统分隔符)
*/
public static Path toPath(String path) {
if (path == null) {
return null;
}
return Paths.get(normalizeToUnix(path));
}
}