java中的路径处理、左右斜杠

文章目录

      • [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));
    }
}
相关推荐
.Bryce.23 分钟前
你了解 Blackboard(黑板系统)吗?听说过基于黑板系统实现的智能体吗?
java·网络·gpt·php·agent·codex·黑板系统
MasonYyp36 分钟前
声音转文字的模型
python
银河技术36 分钟前
从脚本到 Operator:用 Go 构建可靠的微服务自动扩缩容控制器
开发语言·微服务·golang
GIS数据转换器2 小时前
地下空间综合管廊运营管理平台
大数据·开发语言·人工智能·经验分享·perl
猿究院_夏燊7 小时前
Spring Bean 生命周期
java·后端·spring
Wang's Blog8 小时前
Java 项目实战: 交友项目:登录链路回顾与今日任务地图
java·开发语言·状态模式·交友
信誓旦旦的程序猿8 小时前
【Python量化实战宝典 #08】可转债与债券接口手册:转股价·溢价率·纯债价值(Python 可跑)
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
砚底藏山河8 小时前
python量化:行情数据回溯
java·开发语言·python·金融·maven
今年下半年8 小时前
AI智能体项目实战记录(02):初始化 Python 项目
开发语言·人工智能·python·fastapi
Jlzn88888 小时前
华东电芯分选通道数怎么配才不堵线
java·人工智能·架构·自动化·制造