Java Top.

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程

1.概述

java.io.file.班有三种方法 -getpath()getabsolutepath()getcanonicalpath()- 获取文件系统路径。

在本文中,我们将快速查看它们之间的差异,并讨论您可以选择使用一个在其他人身上的用例。

2.方法定义和示例

让我们首先介绍三种方法的定义,以及基于具有在用户主目录中存在的以下目录结构的示例:

|  -金宝搏188体育  Baeldung |  -  Baeldung.txt |  -  Foo ||  -  foo-one.txt |\  -  foo-two.txt \  -  bar |  -  bar-one.txt |  -  bar-bipe.txt \  -  baz |  -  baz-one.txt \  -  baz-two.txt

2.1。getpath()

简单的说,getpath()返回细绳表示文件的抽象路径名。这基本上是路径名传递给了文件构造函数

所以,如果文件使用相对路径创建对象,返回值getpath()方法也是一个相对路径。

如果我们从中调用以下代码{user.home} 金宝搏188体育/ baeldung目录:

File File = new File("foo/foo-one.txt");String path = file.getPath();

小路变量具有值:

foo / foo-one.txt //在UNIX系统上foo \ foo-one.txt //在Windows系统上

请注意,对于Windows系统,名称 - 分隔符字符已从前向斜杠(/)字符已更改,该字符被传递给Backslash(\)字符。这是因为回归细绳始终使用平台的默认名称分隔符字符

2.2。getabsolutepath()

getabsolutepath()方法退货解析当前用户目录的路径后文件的路径名- 这称为绝对的路径名。所以,对于我们之前的例子,file.getAbsolutePath ()会返回:

在Unix系统上,\ user金宝搏188体育s \用户名\baeldung\foo\foo-one.txt //在系统上,\ users \用户名\baeldung\foo\foo-one.txt //在系统上,\foo\foo-one.txt //

此方法仅解析当前目录的相对路径。速记表现(如“。“和 ”......“)没有进一步解决。因此,当我们从目录执行以下代码时{user.home} 金宝搏188体育/ baeldung:

文件文件=新文件(“栏/ baz / arb-one.txt”);字符串路径= file.getabsolutepath();

变量的值小路将会:

/home/username/金宝搏188体育baeldung/bar/baz/../bar-one.txt //在Unix系统上c:\ users \ username \ baeldung \ bar \ baz \ .. \ bar-one.txt //在Windows系统上

2.3。getcanonicalpath()

getcanonicalpath()方法进一步逐步解析绝对路径名以及简写或冗余名称,如“”和“..根据目录结构。它还解决了符号链接在UNIX系统和将驱动器号转换为标准案例在Windows系统上。

所以对于前面的例子,getcanonicalpath()方法将返回:

/home/username/金宝搏188体育baeldung/bar/bar-one.txt //对于Unix系统,\ users \username\ \ \ \ \ \baeldung\ \bar-one.txt //对于Windows系统,\ users \ \username\ \ \ \baeldung\ \bar-one.txt //

让我们拿另一个例子。给定当前目录$ {user.home}金宝搏188体育 / baeldung文件使用参数创建的对象新文件(“栏/ baz /./ baz-one.txt”),输出getcanonicalpath()将会:

/home/username/金宝搏188体育baeldung/bar/baz/baz-one.txt / /在Unix系统上C:\Users\username\baeldung\bar\baz\ baz-one.txt / /在Windows系统

值得一提的是,文件系统上的单个文件可以具有无限数量的绝对路径,因为可以使用速记表示的无限数量。然而,规范路径将始终是独一无二的由于所有此类表示都得到解决。

与最后两种方法不同,getcanonicalpath()可能会抛弃IoException.因为它需要文件系统查询。

例如,在Windows系统上,如果我们创建一个文件对象与其中一个非法字符,解决规范路径将抛出IoException.

新文件(“*”).getCanonicalPath ();

3.用例

假设我们正在编写一种方法文件对象作为参数并保存其完全合格的名称到一个数据库中。我们不知道路径是相对的还是包含简写。在这种情况下,我们可能想使用getcanonicalpath()

然而,由于getcanonicalpath()读取文件系统,它以性能成本。如果我们确定没有冗余名称或符号链接和驱动器案例标准化(如果使用Windows操作系统),那么我们应该更喜欢使用getabsoultepath()

4。结论

在这个快速的教程中,我们涵盖了三个之间的差异文件获取文件系统路径的方法。我们还示出了一种用例,其中一个方法可以优选另一个方法。

一种junit.可以找到测试类,可以找到本文的示例在GitHub

Java底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程
本文评论关闭!