黑马程序员技术交流社区

标题: file的getPath getAbsolutePath和getCanonicalPath的不同 [打印本页]

作者: 原满    时间: 2013-4-7 10:48
标题: file的getPath getAbsolutePath和getCanonicalPath的不同
看了JDK 7的API   
getPath()
Converts this abstract pathname into a pathname string.
getCanonicalPath()
Returns the canonical pathname string of this abstract pathname.
getAbsolutePath()
Returns the absolute pathname string of this abstract pathname.
还是有些迷糊, 这三个方法都是将abstract pathname转换成了pathname string 但到底这三个方法有啥区别?

求指点,谢谢
作者: 我手心里的宝    时间: 2013-4-7 10:53
getPath():就是你File()里封装的是什么,你获得的就是什么
例如:File file = new File("C:\\a\\b.txt"); 你获得的就是C:\\a\\b.txt
File file = new File("b.txt");你获得的就是b.txt
而getAbsolutePath() 不过你写入什么,只要文件存在它就获得完整路径
至于getCanonicalPath() 这个不是经常用,我也没有研究,你写一下试试不就全都知道了吗
作者: wanggang    时间: 2013-4-7 10:54
1. path,普通路径名,由getPath()方法返回,就是你构造File时指定路径名。如File f = new File("testFile.txt");则f.getPath()返回的就是"testFile.txt".
2.abstract pathname,根据File的toString方法的说明,这个也是getPath()返回的结果,和上面的一样。
String java.io.File.toString()
Returns the pathname string of this abstract pathname. This is just the string returned by the getPath method.  

3. absolute path,未修饰的绝对路径,像表示上一级路径的符号"..",在absolute path中是直接显示的。
如File abstractf = new File("..\\testFile.txt");
System.out.println(abstractf.getAbsolutePath());
结果就是 D:\springWorkSpace\Fortest\..\testFile.txt

4. canonical path:修饰过的绝对路径。上面abstractf路径中的".."会被解释成上一级路径。如:
System.out.println(abstractf.getAbsolutePath());
结果就是 D:\springWorkSpace\testFile.txt


作者: 绿树林    时间: 2013-4-7 11:31
举个例子说明下区别:
1,getPath()与getAbsolutePath()的区别
public static void test1(){
        File file1 = new File(".\\test1.txt");
        File file2 = new File("D:\\workspace\\test\\test1.txt");
        System.out.println("-----默认相对路径:取得路径不同------");
        System.out.println(file1.getPath());
        System.out.println(file1.getAbsolutePath());
        System.out.println("-----默认绝对路径:取得路径相同------");
        System.out.println(file2.getPath());
        System.out.println(file2.getAbsolutePath());
        
    }

得到的结果:
-----默认相对路径:取得路径不同------
.\test1.txt
D:\workspace\test\.\test1.txt
-----默认绝对路径:取得路径相同------
D:\workspace\test\test1.txt
D:\workspace\test\test1.txt
因为getPath()得到的是构造file的时候的路径。
getAbsolutePath()得到的是全路径
如果构造的时候就是全路径那直接返回全路径
如果构造的时候试相对路径,返回当前目录的路径+构造file时候的路径

2,getAbsolutePath()和getCanonicalPath()的不同
public static void test2() throws Exception{
        File file = new File("..\\src\\test1.txt");
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalPath());
    }
得到的结果
D:\workspace\test\..\src\test1.txt
D:\workspace\src\test1.txt
可以看到CanonicalPath不但是全路径,而且把..或者.这样的符号解析出来。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2