Java文件的路径、绝对路径和规范路径示例说明
java.io.File 提供了三个方法来获取文件的路径不同写法,这三个方法分别是getPath()、getAbsolutePath()和getCanonicalPath(),下面将进一步说明它们。
getPath
本方法将文件的抽象路径名转换为一个路径名字符串并返回,返回的字符串使用默认名称分隔符(Windows下为“、”,Unix下为“/”)分隔名称序列中的名称。如果使用URI创建的文件,字符串将移除协议头。
getAbsolutePath
本方法返回文件的绝对路径名字符串。
如果文件对象本身是通过绝对路径名创建的,将简单地返回原来的参数,这与 getPath() 方法一样;如果文件对象是通过相对路径创建的,返回的绝对路径名的解析方式因操作系统类型不同。在 UNIX 系统上,根据用户的当前目录解析相对路径名,可使该路径名成为绝对路
径名。在 Microsoft Windows 系统上,首先根据路径名指定的当前驱动器目录(如果有)解析相对路径名,可使该路径名成为绝对路径名;否则,可以根据当前用户目录解析它。
getCanonicalPath
本方法返回规范的文件路径名字符串,建议优先使用
规范路径名是绝对路径名,并且是惟一的。规范路径名的准确定义与系统有关。如有必要,此方法首先将路径名转换为绝对路径名,这与调用 getAbsolutePath() 方法的效果一样,然后用与系统相关的方式将它映射到其惟一路径名。这通常涉及到从路径名中移除多余的名称(比如 "." 和 "..")、解析符号连接(对于 UNIX 平台),以及将驱动器号转换为标准大小写形式(对于 Microsoft Windows 平台)。
每个表示现存文件或目录的路径名都有一个惟一的规范形式。每个表示不存在文件或目录的路径名也有一个惟一的规范形式。不存在文件或目录路径名的规范形式可能不同于创建文件或目录之后同一路径名的规范形式。同样,现存文件或目录路径名的规范形式可能不同于删除文件或目录之后同一路径名的规范形式。
综合示例
注意,当使用URI时,在Windows下的文件路径同样必须以“/”开头,且里面的路径也必须是“/”格式,而不能使用“\\”,否则报各种错。
package com.journaldev.files;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
public class JavaFilePath {
    public static void main(String[] args) throws IOException, URISyntaxException {
    unixFormatTest();
    windowsFormatTest();
    }
    private static void windowsFormatTest() throws IOException, URISyntaxException {
    File file = new File("D:\\gits/commons-io-2.");
    printPaths(file);
    // relative path
    file = new File("test.xsd");
    printPaths(file);
    // complex relative paths
    file = new File("D:\\gits/./../gits/commons-io-2.");
    printPaths(file);
    // URI paths
    file = new File(new URI("file:///D:/gits/commons-io-2."));
    printPaths(file);
absolute relative    // 下面的URI将报错,file协议类型文件地址必须使用“/”,在windows下文件路径也必须以“/”开始
    // file =new File(new URI("file:///D:\\gits\\commons-io-2.4\\w1.txt"));
    }
    private static void unixFormatTest() throws IOException, URISyntaxException {
    File file = new File("/Users/");
    printPaths(file);
    // relative path
    file = new File("test.xsd");
    printPaths(file);
    // complex relative paths
    file = new File("/Users/pankaj/../");
    printPaths(file);
    // URI paths
    file = new File(new URI("file:///Users/"));
    printPaths(file);
    }
    private static void printPaths(File file) throws IOException {
    System.out.println("Absolute Path: " + file.getAbsolutePath());
    System.out.println("Canonical Path: " + file.getCanonicalPath());
    System.out.println("Path: " + file.getPath());
    System.out.println();
    }
}
以下输出结果均是在Windows下测试得到的:
Absolute Path: D:\Users\
Canonical Path: D:\Users\
Path: \Users\
Absolute Path: D:\gits\commons-io-2.4\test.xsd
Canonical Path: D:\gits\commons-io-2.4\test.xsd
Path: test.xsd
Absolute Path: D:\Users\pankaj\..\
Canonical Path: D:\Users\
Path: \Users\pankaj\..\
Absolute Path: D:\Users\
Canonical Path: D:\Users\
Path: \Users\
Absolute Path: D:\gits\commons-io-2.
Canonical Path: D:\gits\commons-io-2.
Path: D:\gits\commons-io-2.
Absolute Path: D:\gits\commons-io-2.4\test.xsd
Canonical Path: D:\gits\commons-io-2.4\test.xsd
Path: test.xsd
Absolute Path: D:\gits\.\..\gits\commons-io-2.
Canonical Path: D:\gits\commons-io-2.
Path: D:\gits\.\..\gits\commons-io-2.
Absolute Path: D:\gits\commons-io-2.
Canonical Path: D:\gits\commons-io-2.
Path: D:\gits\commons-io-2.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。