File的getPath getAbsolutePath和getCanonicalPath的不同

File的getPath ,getAbsolutePath和getCanonicalPath的不同 
概念上的区别:(内容来自jdk,个人感觉这个描述信息,只能让明白的人明白,不明白的人看起来还是有点难度(特别是中文版,英文版稍好些)所以在概念之后我会举例说明。如果感觉看概念很累就跳过直接看例子吧。看完例子回来看概念会好些。 
getPath 
public String getPath()将此抽象路径名转换为一个路径名字符串。所得到的字符串使用默认名称分隔符来分隔名称序列中的名称。  返回: 
此抽象路径名的字符串形式 
 
getAbsolutePath 
public String getAbsolutePath() 返回抽象路径名的绝对路径名字符串。  
如果此抽象路径名已经是绝对路径名,则返回该路径名字符串,这与 getPath() 方法一样。如果此抽象路径名是空的抽象路径名,则返回当前用户目录的路径名字符串,该目录由系统属性 user.dir 指定。否则,使用与系统有关的方式分析此路径名。在 UNIX 系统上,通过根据当前用户目录分析某一相对路径名,可使该路径名成为绝对路径名。在 Microsoft Windows 系统上,通过由路径名指定的当前驱动器目录(如果有)来分析某一相对路径名,可使该路径名成为绝对路径名;否则,可以根据当前用户目录来分析它。  返回: 
绝对路径名字符串,它与此抽象路径名表示相同的文件或目录的  抛出: 
 
SecurityException- 如果无法访问所需的系统属性值。 另请参见: isAbsolute() 
 
getCanonicalPath 
public String getCanonicalPath() throws IOException返回抽象路径名的规范路径名字符串。  
规范路径名是绝对路径名,并且是惟一的。规范路径名的准确定义与系统有关。如有必要,此方法首先将路径名转换成绝对路径名,这与调用 getAbsolutePath() 方法的效果一样,然后用与系统相关的方式将它映射到其惟一路径名。这通常涉及到从路径名中移除多余的名称(比如"." 和"..")、分析符号连接(对于 UNIX 平台),以及将驱动器名转换成标准大小写形式(对于 Microsoft Windows 平台)。  
 
表示现有文件或目录的每个路径名都有一个惟一的规范形式。表示非存在文件或目录的每个路径名也有一个惟一
的规范形式。非存在文件或目录路径名的规范形式可能不同于创建文件或目录之后同一路径名的规范形式。同样,现有文件或目录路径名的规范形式可能不同于删除文件或目录之后同一路径名的规范形式。  返回: 
表示与此抽象路径名相同的文件或目录的规范路径名字符串  抛出: 
 IOException- 如果发生 I/O 错误(可能是因为构造规范路径名需要进行文件系统查询) 
 
SecurityException- 如果无法访问所需的系统属性值,或者存在安全管理器,且其 SecurityManager.checkRead(java.io.FileDescriptor) 方法拒绝对该文件进行读取访问 
从以下版本开始:  
JDK1.1  
  wk_ad_begin({pid : 21});wk_ad_after(21, function(){$('.ad-hidden').hide();}, function(){$('.ad-hidden').show();});    
  
二、例子: 
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不但是全路径,而且把..或者.这样的符号解析出来。 3,getCanonicalPath()和自己的不同。 就是解释这段话: 
表示现有文件或目录的每个路径名都有一个惟一的规范形式。表示非存在文件或目录的每个路径名也有一个惟一的规范形式。非存在文件或目录路径名的规范形式可能不同于创建文件或目录之后同一路径名的规范形式。同样,现有文件或目录路径名的规范形式可能不同于删除文件或目录之后同一路径名的规范形式。   
单下边这段代码是看不到结果的,要配合一定的操作来看。下边操作步骤,同时讲解 
public static void test3()throws Exception{          File file= new File("D:\\Text.txt");          System.out.println(file.getCanonicalPath());   } 

步骤: 
确定你的系统是Windows系统。 
(1),确定D盘下没有Text.txt这个文件,直接执行这段代码,得到的结果是: 
D:\Text.txt 
注意这里试大写的Text.txt 
(2)在D盘下建立一个文件,名叫text.txt,再次执行代码,得到结果 
D:\text.txt 
同样的代码得到不同的结果。 
同时可以对比getAbsolutePath()看看,这个得到的结果是一样的。  
原因: 
window是大小写不敏感的,也就是说在windows上test.txt和Test.txt是一个文件,所以在windows上当文件不存在时,得到的路径就是按照输入的路径。但当文件存在时,就会按照实际的情况来显示。这也就是建立文件后和删除文件后会有不同的原因。文件夹和文件类似。  
三、最后: 
1,尝试在linux下执行上边的步骤,两次打印的结果是相同的,因为linux是大小写敏感的系统。 2,手动删掉test.txt,然后尝试执行下边代码 
public static void test4()throws Exception{          File file= new File("D:\\Text.txt");          System.out.println(file.getCanonicalPath());          File file1= new File("D:\\text.txt");          file1.createNewFile();          file= new File("D:\\Text.txt"); 
         System.out.println(file.getCanonicalPath());   } 
 
public static void test3()throws Exception{          File file1= new File("D:\\text.txt");          file1.createNewFile(); 
         File file= new File("D:\\Text.txt");          System.out.println(file.getCanonicalPath());   } 
执行上边两个函数,看看结果,然后思考一下为什么? 1,的结果是两个大写, 2,的结果试两个小写 
连续两个大写的,是否跟上边的矛盾 ? 
这是因为虚拟机的缓存机制造成的。第一次File file = new File("D:\\Text.txt");决定了结果. 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: getpath和getabsolutepathJavaFile类的两个方法。 getpath方法返回文件的路径名,即文件在文件系统中的相对路径。 getabsolutepath方法返回文件的绝对路径名,即文件在文件系统中的完整路径。 ### 回答2: getpath是Python中用于获取文件的路径和文件名的函数。它的作用是返回文件的绝对路径和文件名,而不包括文件名的扩展名。 getpath函数有一个必需的参数——文件的完整路径。当文件没有指定路径时,getpath函数会根据当前工作目录返回相对路径。 对于具有不同操作系统的计算机,getpath函数还能够处理路径分隔符的问题,并返回正确格式的路径。例如,在Windows系统中,路径分隔符为“\”,而在UNIX系统中,路径分隔符为“/”。 与getpath函数类似的是getabsolutepath函数。getabsolutepath函数是Python中用于获取文件的完整路径的函数。与getpath不同的是,getabsolutepath函数返回文件的完整路径,包括文件名的扩展名和路径分隔符。 使用getabsolutepath函数时,我们需要提供的是文件的相对路径或绝对路径。如果我们提供了相对路径,则getabsolutepath函数会返回文件在当前工作目录下的完整路径。 总之,getpath和getabsolutepath都是Python中用于获取文件路径信息的函数。它们能够根据不同操作系统的特点返回正确格式的文件路径信息,并对路径分隔符进行处理。同时,在使用这两个函数时,我们需要注意提供正确的参数,以便获取我们所需要的文件路径信息。 ### 回答3: getpath和getabsolutepath都是Java类库中的方法,主要的作用是获取文件或目录的路径。然而,这两个方法在具体实现和返回结果上有所不同。 首先,getpathFile类中的方法,它返回的是指定文件或目录的路径的最后一部分。也就是说,它只返回这个文件或目录的名称,不包括所在的路径。比如,如果一个文件的完整路径为“/Users/username/Documents/example.txt”,那么getpath方法将会返回“example.txt”。 相比之下,getabsolutepathFile类中的另一个方法,它返回指定文件或目录的完整路径。与getpath方法不同的是,getabsolutepath会将文件或目录的路径一起返回。所以,以同一个文件为例,在调用getabsolutepath方法时,它将返回“/Users/username/Documents/example.txt”。 需要注意的是,getpath返回的路径是相对路径,而getabsolutepath返回的路径是绝对路径。相对路径指的是相对于当前目录的路径,而绝对路径则指的是从系统根目录开始的路径。 总的来说,无论是getpath还是getabsolutepath,它们都是用来获取Java文件或目录的路径的方法。但是它们返回的结果不同,getpath只返回文件/目录名称,getabsolutepath则返回完整的文件/目录路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值