《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.5.1 Path

2.5.1 Path

Path表示的是一个目录名序列,其后还可以跟着一个文件名。路径中的第一个部件可以是根部件,例如 / 或 C:\,而允许访问的根部件取决于文件系统。以根部件开始的路径是绝对路径;否则,就是相对路径。例如,我们要分别创建一个绝对路径和一个相对路径;其中,对于绝对路径,我们假设计算机运行的是类Unix的文件系统:

静态的Paths.get方法接受一个或多个字符串,并将它们用默认文件系统的路径分隔符(类Unix文件系统是/,Windows是\)连接起来。然后它解析连接起来的结果,如果其表示的不是给定文件系统中的合法路径,那么就抛出InvalidPathException异常。这个连接起来的结果就是一个Path对象。
get方法可以获取包含多个部件构成的单个字符串,例如,可以像下面这样从配置文件中读取路径:

注意:路径不必对应着某个实际存在的文件,它仅仅只是一个抽象的名字序列。你在接下来的小节中将要看到,当你想要创建文件时,首先要创建一个路径,然后才调用方法去创建对应的文件。
组合或解析路径是司空见惯的操作,调用p.resolve(q)将按照下列规则返回一个路径:

  • 如果q是绝对路径,则结果就是q。
  • 否则,根据文件系统的规则,将“p后面跟着q”作为结果。

例如,假设你的应用系统需要查找相对于给定基目录的工作目录,其中基目录是从配置文件中读取的,就像前一个例子一样。

将创建/opt/myapp/temp。
resolve的对立面是relativize,即调用p.relativize(r)将产生路径q,而对q进行解析的结果正是r。例如,以“/home/cay”为目标对“/home/fred/myprog”进行相对化操作,会产生“../fred/myprog”,其中,我们假设..表示文件系统中的父目录。
normalize方法将移除所有冗余的.和..部件(或者文件系统认为冗余的所有部件)。例如,规范化/home/cay/../fred/./myprog将产生/home/fred/myprog。
toAbsolutePath方法将产生给定路径的绝对路径,该绝对路径从根部件开始,例如/home/fred/input.txt或c:\Users\fred\input.txt。
Path类有许多有用的方法用来将路径断开。下面的代码示例展示了其中部分最有用的方法:

注意:偶尔,你可能需要与遗留系统的API交互,它们使用的是File类而不是Path接口。Path接口有一个toFile方法,而File类有一个toPath方法。

时间: 2024-11-02 03:34:16

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.5.1 Path的相关文章

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一导读

前 言 致读者 本书是按照Java SE 8完全更新后的<Java核心技术 卷Ⅱ 高级特性(原书第10版)>.卷Ⅰ主要介绍了Java语言的一些关键特性:而本卷主要介绍编程人员进行专业软件开发时需要了解的高级主题.因此,与本书卷Ⅰ和之前的版本一样,我们仍将本书定位于用Java技术进行实际项目开发的编程人员. 编写任何一本书籍都难免会有一些错误或不准确的地方.我们非常乐意听到读者的意见.当然,我们更希望对本书问题的报告只听到一次.为此,我们创建了一个FAQ.bug修正以及应急方案的网站http:/

Java核心技术 卷Ⅰ 基础知识(原书第10版)

Java核心技术系列 Java核心技术 卷Ⅰ 基础知识 (原书第10版) Core Java Volume I-Fundamentals (10th Edition) [美] 凯S.霍斯特曼(Cay S. Horstmann) 著 周立新 陈 波 叶乃文 邝劲筠 杜永萍 译 图书在版编目(CIP)数据 Java核心技术 卷Ⅰ 基础知识(原书第10版) / (美)凯S. 霍斯特曼(Cay S. Horstmann)著:周立新等译. -北京:机械工业出版社,2016.8 (Java核心技术系列) 书

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一第3章 XML

第3章 XML ▲ XML概述 ▲ 使用命名空间 ▲ 解析XML文档 ▲ 流机制解析器 ▲ 验证XML文档 ▲ 生成XML文档 ▲ 使用XPath来定位信息 ▲ XSL转换 Don Box等人在其合著的<Essential XML>(Addison-Wesley出版社2000年出版)的前言中半开玩笑地说道:"可扩展标记语言(Extensible Markup Language,XML)已经取代了Java.设计模式.对象技术,成为软件行业解决世界饥荒的方案."确实,正如你将在

《Java语言导学(原书第6版)》一导读

前 言 自2010年年初Oracle公司收购Sun公司以来,Java语言迎来激动人心的时代.正如Java Community Process计划的活动所印证的,Java语言将不断发展.本书基于Java SE 8(Java Platform Standard Edition 8)并引用其API. 相比本书第5版(针对的是Java版本7),第6版有一些新特点: Lambda表达式使得功能可作为方法参数使用,代码作为数据使用.Lambda表达式描述单个方法接口(也称为功能接口)的实例会更简洁.4.4.

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.8 XSL转换

3.8 XSL转换 XSL转换(XSLT)机制可以指定将XML文档转换为其他格式的规则,例如,转换为纯文本.XHTML或任何其他的XML格式.XSLT通常用来将某种机器可读的XML格式转译为另一种机器可读的XML格式,或者将XML转译为适于人类阅读的表示格式. 你需要提供XSLT样式表,它描述了XML文档向某种其他格式转换的规则.XSLT处理器将读入XML文档和这个样式表,并产生所要的输出(参见图3-7). XSLT规范很复杂,已经有很多书描述了该主题.我们不可能讨论XSLT的全部特性,所以我们

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.6.1 使用SAX解析器

3.6.1 使用SAX解析器 SAX解析器在解析XML输入数据的各个组成部分时会报告事件,但不会以任何方式存储文档,而是由事件处理器建立相应的数据结构.实际上,DOM解析器是在SAX解析器的基础上构建的,它在接收到解析器事件时构建DOM树. 在使用SAX解析器时,需要一个处理器来为各种解析器事件定义事件动作.ContentHandler接口定义了若干个在解析文档时解析器会调用的回调方法.下面是最重要的几个: startElement和endElement在每当遇到起始或终止标签时调用. char

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.1.2 完整的流家族

2.1.2 完整的流家族 与C语言只有单一类型FILE*包打天下不同,Java拥有一个流家族,包含各种输入/输出流类型,其数量超过60个!请参见图2-1和图2-2. 让我们把输入/输出流家族中的成员按照它们的使用方法来进行划分,这样就形成了处理字节和字符的两个单独的层次结构.正如所见,InputStream和OutputStream类可以读写单个字节或字节数组,这些类构成了图2-1所示的层次结构的基础.要想读写字符串和数字,就需要功能更强大的子类,例如,DataInputStream和DataO

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.3.3 ZIP文档

2.3.3 ZIP文档 ZIP文档(通常)以压缩格式存储了一个或多个文件,每个ZIP文档都有一个头,包含诸如每个文件名字和所使用的压缩方法等信息.在Java中,可以使用ZipInputStream来读入ZIP文档.你可能需要浏览文档中每个单独的项,getNextEntry方法就可以返回一个描述这些项的ZipEntry类型的对象.向ZipInputStream的getInputStream方法传递该项可以获取用于读取该项的输入流.然后调用closeEntry来读入下一项.下面是典型的通读ZIP文件

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一1.14 并行流

1.14 并行流 流使得并行处理块操作变得很容易.这个过程几乎是自动的,但是需要遵守一些规则.首先,必须有一个并行流.可以用Collection.parallelStream()方法从任何集合中获取一个并行流: 只要在终结方法执行时,流处于并行模式,那么所有的中间流操作都将被并行化. 当流操作并行运行时,其目标是要让其返回结果与顺序执行时返回的结果相同.重要的是,这些操作可以以任意顺序执行. 下面的示例是一项你无法完成的任务.假设你想要对字符串流中的所有短单词计数: 这是一种非常非常糟糕的代码.

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.3.1 文档类型定义

3.3.1 文档类型定义 提供DTD的方式有多种.可以像下面这样将其纳入到XML文档中: 正如你看到的,这些规则被纳入到DOCTYPE声明中,位于由[...]限定界限的块中.文档类型必须匹配根元素的名字,比如我们例子中的conf?iguration. 在XML文档内部提供DTD不是很普遍,因为DTD会使文件长度变得很长.把DTD存储在外部会更具意义,SYSTEM声明可以用来实现这个目标.你可以指定一个包含DTD的URL,例如: 或者 警告:如果你使用的是DTD的相对URL(比如"conf?ig.