`
zhouwei064
  • 浏览: 27277 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

【转】File类的getPath、getAbsolutePath和getCanonicalPath的不同

    博客分类:
  • Java
阅读更多

一、概念上的不同

1 getPath
2 public String getPath()
3 将此抽象路径名转换为一个路径名字符串。所得字符串使用默认名称分隔符分隔名称序列中的名称。
4 返回:
5 此抽象路径名的字符串形式

---------------------------------------------------------

01 getAbsolutePath
02 public String getAbsolutePath()
03 返回此抽象路径名的绝对路径名字符串。
04 如果此抽象路径名已经是绝对路径名,则返回该路径名字符串,这与 getPath() 方法一样。如果此抽象路径名是空抽象路径名,则返回当前用户目录的路径名字符串,该目录由系统属性 user.dir 指定。否则,使用与系统有关的方式解析此路径名。在 UNIX 系统上,根据当前用户目录解析相对路径名,可使该路径名成为绝对路径名。在 Microsoft Windows 系统上,根据路径名指定的当前驱动器目录(如果有)解析相对路径名,可使该路径名成为绝对路径名;否则,可以根据当前用户目录解析它。
05 返回:
06 绝对路径名字符串,它与此抽象路径名表示相同的文件或目录
07 抛出:
08 SecurityException - 如果无法访问所需的系统属性值。
09 另请参见:
10 isAbsolute()

---------------------------------------------------------

01 getCanonicalPath
02 public String getCanonicalPath()
03                         throws IOException
04 返回此抽象路径名的规范路径名字符串。
05 规范路径名是绝对路径名,并且是惟一的。规范路径名的准确定义与系统有关。如有必要,此方法首先将路径名转换为绝对路径名,这与调用 getAbsolutePath() 方法的效果一样,然后用与系统相关的方式将它映射到其惟一路径名。这通常涉及到从路径名中移除多余的名称(比如 "." 和 "..")、解析符号连接(对于 UNIX 平台),以及将驱动器号转换为标准大小写形式(对于 Microsoft Windows 平台)。
06 每个表示现存文件或目录的路径名都有一个惟一的规范形式。每个表示不存在文件或目录的路径名也有一个惟一的规范形式。不存在文件或目录路径名的规范形式可能不同于创建文件或目录之后同一路径名的规范形式。同样,现存文件或目录路径名的规范形式可能不同于删除文件或目录之后同一路径名的规范形式。
07 返回:
08 规范路径名字符串,它与此抽象路径名表示相同的文件或目录
09 抛出:
10 IOException - 如果发生 I/O 错误(可能是因为构造规范路径名需要进行文件系统查询)
11 SecurityException - 如果无法访问所需的系统属性值,或者存在安全管理器,且其SecurityManager.checkRead(java.io.FileDescriptor) 方法拒绝对文件进行读访问
12 从以下版本开始:
13 JDK1.1

二、实例解析

1.getPath()getAbsolutePath()的区别

01 public void diff_pathAndAbsolutePath(){
02     File file1 = new File(".\\test1.txt");
03     File file2 = new File("D:\\workspace\\test\\test1.txt");
04     System.out.println("-----默认相对路径:取得路径不同------");
05     System.out.println(file1.getPath());
06     System.out.println(file1.getAbsolutePath());
07     System.out.println("-----默认绝对路径:取得路径相同------");
08     System.out.println(file2.getPath());
09     System.out.println(file2.getAbsolutePath());
10 }

得到的结果:

1 -----默认相对路径:取得路径不同------
2 .\test1.txt
3 D:\workspace\test\.\test1.txt
4 -----默认绝对路径:取得路径相同------
5 D:\workspace\test\test1.txt
6 D:\workspace\test\test1.txt

结论:

getPath得到的是构造参数的路径。

getAbsolutePath得到的是全路径。如果构造参数是相对路径,则返回当前目录的绝对路径+构造参数路径;如果是绝对路径则直接返回。

2.getAbsolutePath()getCanonicalPath()的区别

1 public void diff_AbsolutePathAndCanonicalPath() throws IOException{
2     File file = new File("..\\src\\test1.txt");
3     System.out.println(file.getAbsolutePath());
4     System.out.println(file.getCanonicalPath());
5 }

得到的结果:

1 D:\workspace\test\..\src\test1.txt
2 D:\workspace\src\test1.txt

结论:

getCanonicalPath得到的不仅是全路径,而且会解析并剔除[..]这样的符号,即给出一个标准的绝对路径。

3.getCanonicalPath()自身的区别

就是解释这段话:

1 每个表示现存文件或目录的路径名都有一个惟一的规范形式。每个表示不存在文件或目录的路径名也有一个惟一的规范形式。不存在文件或目录路径名的规范形式可能不同于创建文件或目录之后同一路径名的规范形式。同样,现存文件或目录路径名的规范形式可能不同于删除文件或目录之后同一路径名的规范形式。
1 public void diff_canonicalPathAndSelf() throws IOException{
2     File file = new File("D:\\Text.txt");
3     System.out.println(file.getCanonicalPath());
4 }

操作步骤:

(1)确定你的系统是Windows系统。确定D盘下没有Text.txt这个文件,直接执行这段代码,得到的结果是:

1 D:\Text.txt

(2)在D盘下建立一个文件,名叫text.txt,再次执行代码,得到结果是:

1 D:\text.txt

(3)在linux系统中按以上步骤运行代码。得到的结果是:

1 两次结果一样。

结论:

 

window是大小写不敏感的,也就是说在windows上test.txt和Test.txt是一个文件,所以在windows上当文件不存在时,得到的路径就是按照输入的路径。但当文件存在时,就会按照实际的情况来显示。这也就是建立文件后和删除文件后会有不同的原因。文件夹和文件类似。而在linux系统中,大小写是敏感的。

分享到:
评论

相关推荐

    File的getPathgetAbsolutePath和getCanonicalPath的不同.pdf

    Java中File类提供了三个相关的方法:getPath、getAbsolutePath和getCanonicalPath,它们都可以获取文件或目录的路径,但是它们的作用和返回结果不同。 getPath方法: getPath方法将抽象路径名转换为一个路径名字符...

    Java中getPath与getAbsolutePath区别.pdf

    在 Java 中,File 类表示的是文件和目录路径的抽象形式。其中,getPath() 和 getAbsolutePath() 两个方法都是用于获取文件或目录的路径,但是它们之间存在着一些区别。 首先,让我们来看一下 getPath() 方法。...

    java file类的方法

    在Java编程语言中,`java.io.File`类是一个非常重要的类,它提供了对文件和目录路径名的抽象表示,并且支持一些基本的操作,例如创建、删除文件或目录等。本文将详细介绍`File`类中的常用构造方法及方法,并给出相应...

    java File类的一些知识

    本文将深入探讨 `File` 类中的 `getPath()`, `getAbsolutePath()`, 和 `getCanonicalPath()` 方法之间的区别及其应用场景。 ### 一、`File` 类简介 `java.io.File` 类是Java标准库中的一个基础类,用于封装文件或...

    java的file类

    Java中的`File`类是Java.io包中的核心类,它用于表示文件和目录路径名的抽象表示。在Java中,`File`类并不是用来存储文件内容的,而是用来操作文件和目录,比如创建、删除、重命名文件,以及获取文件的各种属性信息...

    File类基本用法java-Eclipse

    Java中的`File`类是Java.io包中的核心类,它被用来封装文件和目录路径名。这个类提供了许多方法来操作文件和目录,包括创建、删除、重命名、获取属性等。下面,我们将深入探讨`File`类的基本用法。 1. 创建文件对象...

    Java基础知识小结

    2. **file的getPath, getAbsolutePath, getCanonicalPath的不同**: 同上,`getPath()`返回基本路径,`getAbsolutePath()`提供完整绝对路径,`getCanonicalPath()`则处理了路径中的相对引用和符号链接。 3. **int ...

    File_java_

    `File`类是Java.io包中的核心类,它提供了与文件和目录路径名字符串的操纵方法。`File`类主要用于文件和目录的创建、删除、重命名以及获取文件的相关信息。 在`File`类中,有多个关键方法来执行这些操作: 1. **...

    565.563.JAVA基础教程_泛型与File-为什么要使用泛型(565).rar

    4. **路径处理:** `getPath()`、`getAbsolutePath()`和`getCanonicalPath()`分别返回文件的路径、绝对路径和规范路径。 5. **文件I/O操作:** 虽然File类本身并不直接进行文件的读写,但它可以与其他I/O流结合使用...

    对File的各种操作

    `getPath()`, `getCanonicalPath()`和`getAbsoluteFile()`用于获取文件的路径表示形式,`toURI()`和`toURL()`可以将文件转换为URI或URL对象。 在提供的`FileOperator.java`文件中,很可能包含了对这些操作的实现。...

    Java中获取文件路径的几种方式

    Java提供了系统属性,如`user.dir`和`java.class.path`,用于获取当前工作目录和类路径。 ##### 示例代码: ```java System.out.println(System.getProperty("user.dir")); // 输出:C:\DocumentsandSettings\...

    java 获取当前路径

    需要注意的是,getCanonicalPath() 和 getAbsolutePath() 两个函数的行为有所不同。getCanonicalPath() 函数将返回标准的路径,而 getAbsolutePath() 函数将返回绝对路径。 在使用 File 提供的函数时,需要注意 new...

    Java基础学习27.pdf

    `getPath()`, `getAbsolutePath()`, `getCanonicalPath()`分别获取文件的路径、绝对路径和规范路径;`list()`, `listFiles(FileFilter)`列出目录下的文件和子目录;`listRoots()`则返回系统的根目录列表。 学习Java...

    得到文档路径的几种方法

    通过以上介绍可以看出,`getAbsolutePath()`、`getPath()` 和 `getCanonicalPath()` 这三个方法分别提供了获取绝对路径、相对路径和规范路径的功能。开发者可以根据实际需求选择合适的方法来获取文件或目录的路径。...

    第13章 IO流1

    虽然 `File` 类可以用来创建、删除、重命名文件和目录,但实际的数据读写操作需要借助于输入/输出流(InputStream 和 OutputStream 或 Reader 和 Writer)。输入流用于从源(如文件、网络连接等)读取数据,而输出流...

    笔记17-JAVAEE之文件操作-IO

    6. 文件操作中的常见方法:File 对象的常见方法包括 getParent()、getName()、getPath()、getAbsolutePath()、getCanonicalPath()、exists()、isDirectory()、isFile()、createNewFile() 等。 7. 文件的元信息:...

    第14章 IO流1

    父目录名:" + f2.getParent...总的来说,Java 的 `java.io.File` 类提供了对文件和目录的操作,但实际的数据读写需要借助于 IO 流类。理解并熟练使用这些类,将有助于你在 Java 开发中有效地处理文件和数据传输问题。

    关于Java文件路径问题

    它提供了许多方法来处理文件路径,如`exists()`检查文件是否存在,`createNewFile()`创建新文件,`mkdirs()`创建多级目录,以及`getPath()`、`getAbsolutePath()`和`getCanonicalPath()`获取各种形式的路径。...

Global site tag (gtag.js) - Google Analytics