当前位置: 首页 > 面试题库 >

Java中的getPath(),getAbsolutePath()和getCanonicalPath()有什么区别?

孔权
2023-03-14
问题内容

什么之间的区别getPath()getAbsolutePath()以及getCanonicalPath()在Java中?

以及何时使用每一个?


问题答案:

考虑以下文件名:

C:\temp\file.txt -这是一条路径,一条绝对路径和一条规范路径。

.\file.txt-这是一条路。它既不是绝对路径也不是规范路径。

C:\temp\myapp\bin\..\\..\file.txt-这是一条路径,也是一条绝对路径。这不是一条规范的道路。

规范路径始终是绝对路径。

从路径转换为规范路径使其成为绝对路径(通常添加到当前工作目录,因此例如./file.txt成为c:/temp/file.txt)。文件的规范路径仅“净化”路径,删除..\并解决符号链接之类的问题并解决(在Unix上)符号链接。

还要注意以下带有nio.Paths的示例:

String canonical_path_string = "C:\\Windows\\System32\\";
String absolute_path_string = "C:\\Windows\\System32\\drivers\\..\\";

System.out.println(Paths.get(canonical_path_string).getParent());
System.out.println(Paths.get(absolute_path_string).getParent());

虽然两个路径都指向相同的位置,但是输出将大不相同:

C:\Windows
C:\Windows\System32\drivers


 类似资料:
  • 问题内容: 在有一种方法和一种方法。 在我的测试中,它们都返回相同的结果:域名后跟斜杠后的完整路径和文件。 例如,两种方法都返回。 有人可以详细介绍一下Javadocs吗? 问题答案: 该javadocs中这样说: 获取此URL的文件名。返回的文件部分将与getPath()相同,再加上getQuery()值的串联(如果有)。如果没有查询部分,则此方法和getPath()将返回相同的结果。 除非存在

  • 问题内容: 我一直认为Java 中的运算符用于验证其两个布尔操作数是否均为,并且该&运算符用于对两种整数类型进行按位运算。 最近我知道,也可以使用运算符来验证其两个布尔操作数是否均为,唯一的区别是即使LHS操作数为false,它也会检查RHS操作数。 Java中的运算符是否在内部重载?还是在这背后有其他概念? 问题答案: <-验证两个操作数 <-停止评估第一个操作数是否为false,因为结果为fa

  • 问题内容: 我只是想知道为什么我们通常在两个布尔之间使用逻辑OR 而不是按位OR ,尽管它们都运行良好。 我的意思是,请看以下内容: 我们可以代替使用吗?与和相同。 问题答案: 如果您使用和形式,而不是这些运算符的和形式,则Java不会费心地单独评估右手操作数。 这是您是否希望缩短评估时间的问题-在 大多数情况 下都是如此。 说明短路好处的一个好方法是考虑以下示例。 正如Jeremy和Peter提

  • 问题内容: 我在看一些模拟的OCJP问题。我遇到了一个非常令人困惑的语法。这里是: 为什么输出在和之间变化? 问题答案: 问题只是和您玩弄混乱的空格。 是通常的(不等于)比较。 另一方面: 最好写成如下形式: 因此,这是两个运算符。 首先反转。 然后将其分配回。 赋值运算符返回分配的值。因此,计算结果为true-这就是您要打印的内容。

  • 问题内容: 我想了解Java中和类型之间的区别,特别是它们与GWT有关。我知道不支持该方法,但是如果需要的话,我需要更多信息。 问题答案: 我不确定GWT因素是否有所不同,但总的来说: 布尔值 是Java基本类型,而 布尔值 是包装布尔值的对象/引用类型 像这样在图元和对象之间进行转换称为装箱/拆箱。 这是更多信息: http://javaeye.wordpress.com/2008/06/17/

  • 问题内容: 和之间有什么区别? 问题答案: 是一个对象,并且是原始数据类型。 有关更多详细信息,请参见此答案。 Double类将原始类型double的值包装在对象中。类型为Double的对象包含单个类型为double的字段。 来源:http : //docs.oracle.com/javase/7/docs/api/java/lang/Double.html