Java获取文件path—getPath、getAbsolutePath、getCanonicalPath区别

一、三者相同点

1、路径分隔符根据操作系统改变,Windows操作系统使用"\"分隔,Unix操作系统使用"/"分隔。

2、路径最后一个字符不为分隔符。

二、getAbsolutePath、getCanonicalPath相同点

  相对路径都会以当前代码执行路径以父路径取绝对路径。如/home在Windows操作系统下属于相对路径,D:在Unix操作系统下属于相对路径。

三、getCanonicalPath不同点

1、判断路径是否有效,无效则抛出IOException异常,检测代码如下:

    final boolean isInvalid() {
        if (status == null) {
            status = (this.path.indexOf('\u0000') < 0) ? PathStatus.CHECKED
                                                       : PathStatus.INVALID;
        }
        return status == PathStatus.INVALID;
    }

2、处理“..”和“.”。

3、解析符号连接(Unix系统)。

4、驱动器号转化成大写格式(Microsoft Windows 平台)

5、如果是Windows操作系统,大小写不敏感,则会取实际的路径,如存在D:\ExistDir,取D:/existdir的路径时,会返回D:\ExistDir

注:如果使用../表示上一层目录超过了原有的目录层次,只会取当前执行路径的根目录。

四、测试代码:


五、测试结果:

1、环境:Windows操作系统,JDK1.7.0_80,在D:\testPath下执行,存在D:\ExistDir。


2、环境:Redhat操作系统,JDK1.7.0_80,在/home/ExistDir下执行,存在/home/ExistDir。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值