注册 登录
编程论坛 JAVA论坛

一个神奇的问题,有大神帮忙解释一波吗

fydjs 发布于 2018-04-24 15:55, 1672 次点击
代码:
String strPath = "/test/";
System.out.println(strPath);
File file = new File(strPath);
System.out.println(file.getCanonicalPath().replaceAll("\\\\", "/"));


控制台输出:
/test/
/test2
3 回复
#2
疯狂的小a2018-04-24 20:41
/test/
D:/test
我的输出结果
#3
疯狂的小a2018-04-24 20:45
程序代码:
String strPath = "/test/";
        System.out.println(strPath);
        File file = new File(strPath);
        String absolutePath = file.getAbsolutePath();
        System.out.println(absolutePath);
        String canonicalPath = file.getCanonicalPath();
        System.out.println(canonicalPath);
        System.out.println(canonicalPath.replaceAll("\\\\", "/"));

结果
/test/
D:\test
D:\test
D:/test

所以getCanonicalPath()和getAbsolutePath()结果几乎一样。getCanonicalPath函数会将路径归一化之后进行无歧义的比较,可以防止一些安全注入威胁
#4
fydjs2018-04-25 09:34
问题已解决,谢谢啊,这是因为linux根目录下test2文件夹创建了一个在根目录下名为test的快捷方式,所以file.getCanonicalPath()输出的是实际的/test2
1