了解java.nio.file.Path – 2

在本文的第1部分中,我们研究了java.nio.file.Path类中的大多数API。 在本文中,我们将介绍其余的API。

使用register()

该API允许我们注册java.nio.file.WatchService接口的实现,该接口将侦听目录创建,修改和删除等事件。 并且它通过java.nio.file.WatchKey来激发侦听器。 我想为此API撰写另一篇文章,因为它涉及Java 7中引入的另一个新功能。

使用resolve()

此方法处理两个Path实例。 调用此方法的一个实例resolve()方法,将另一个实例作为参数传递。 参数可以是Path实例,也可以是表示路径字符串

此方法针对此路径解析另一条路径。 解决方法如下:

  1. 如果另一个路径是绝对路径,则它将返回另一个路径。 因为可以使用绝对路径来到达其他路径。
  2. 如果另一个路径是相对路径,则另一个路径将附加到此路径。 例如:
    Path path = Paths.get("src", "main", "resources");
    Path other = Paths.get("blogsamples");assertThat(path.resolve(other)).isEqualTo(Paths.get("src", "main", "resources", "blogsamples"));

下面的测试中给出了可以调用此方法的不同方案:

@Test
public void testResolved() throws IOException {Path path = Paths.get("src", "main", "resources");Path other = Paths.get("blogsamples");assertThat(path.resolve(other)).isEqualTo(Paths.get("src", "main", "resources", "blogsamples"));other = Paths.get("/Users");assertThat(path.resolve(other)).isEqualTo(Paths.get("/Users"));path = Paths.get("/src", "main", "resource");assertThat(path.resolve("/Users")).isEqualTo(Paths.get("/Users"));
}

使用resolveSibling()

此方法与resolve()类似,不同之处在于它认为此路径的父级可以解析另一个路径。 同样,我在下面的测试中捕获了不同的可能性:

@Test
public void testResolveSibling(){Path path = Paths.get("src", "main", "resources", "test1");Path other = Paths.get("test2");//both paths are not absoluteassertThat(path.resolveSibling(other)).isEqualTo(Paths.get("src", "main", "resources", "test2"));//other path is absoluteassertThat(path.resolveSibling("/test2")).isEqualTo(Paths.get("/test2"));//this path has no parentpath = Paths.get("/");assertThat(path.resolveSibling("/test2")).isEqualTo(Paths.get("/test2"));//the other path is empty and this path has no parentassertThat(path.resolveSibling("")).isEqualTo(Paths.get(""));//the other path is empty and this path has parentpath = Paths.get("src", "main", "resources", "test1");assertThat(path.resolveSibling("")).isEqualTo(Paths.get("src", "main", "resources"));
}

使用relativize()

此方法返回一个相对路径,该相对路径在针对该路径解析时将返回另一个路径(即,作为参数传递的路径)。

我试图在下面的测试中说明在尝试在两条路径之间创建相对路径时的不同可能性。

Path path = Paths.get("src", "main", "resources", "test1");
Path other = Paths.get("test2");assertThat(path.relativize(other).toString()).isEqualTo("..\\..\\..\\..\\test2");

在上述情况下,两条路径都是相对的。 它需要从src / main / resources / test1向后4跳才能到达/ test2。 通过应用相对论方法也可以得到相同的结果。

如果其中一个路径是绝对路径,另一个路径是相对路径,则调用relativize会导致IllegalArgumentException ,如下所示:

@Test(expected = IllegalArgumentException.class)
public void testRelativize_WithRelativeAndAbsolutePath(){Path path = Paths.get("/src", "main", "resources", "test1");Path other = Paths.get("src", "main", "resources");path.relativize(other);
}

如果两个路径都是绝对路径,则relativize()的输出取决于实现。 以下测试是针对Windows平台上的JDK 8编写的:

@Test
public void testRelativize_WithAbsolutePaths(){Path path = Paths.get("/src", "main", "resources", "test1");Path other = Paths.get("/src", "main", "resources", "test1", "test2");assertThat(path.relativize(other).toString()).isEqualTo("test2");
}

使用startsWith()

此方法检查startsWith()方法所在的路径开头是否与作为参数传递的路径具有相同的名称元素。 并且作为参数传递的路径没有此路径中不存在的多余名称元素。

例如:/ a / b / c以/ a / b开头,a / b / c / d以a / b / c开头

让我们在调用该方法时查看不同的可能情况:

@Test
public void testStartsWith(){//both paths are absolutePath path = Paths.get("/src", "main", "resources", "test1");Path other = Paths.get("/src", "main", "resources");assertThat(path.startsWith(other)).isTrue();/*both paths are absolute, where as the other path has more name elements */path = Paths.get("/src", "main", "resources", "test1");other = Paths.get("/src", "main", "resources", "test1", "test2");assertThat(path.startsWith(other)).isFalse();//both paths are samepath = Paths.get("/src", "main", "resources", "test1");other = Paths.get("/src", "main", "resources", "test1");assertThat(path.startsWith(other)).isTrue();//either of them is relativepath = Paths.get("src", "main", "resources", "test1");other = Paths.get("/src", "main", "resources", "test1");assertThat(path.startsWith(other)).isFalse();//both of them are relativepath = Paths.get("src", "main", "resources", "test1");other = Paths.get("src", "main", "resources");assertThat(path.startsWith(other)).isTrue();}

翻译自: https://www.javacodegeeks.com/2017/09/getting-know-java-nio-file-path-2.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

欧几里德算法求最大公约数

在求两个数的最大公约数方法中, 辗转相除法是比较快的一种方法。 也就是著名的欧几里德方法。 View Code int Gcd(int a, int b){return b0?a:gcd(b, a%b); } View Code #include "iostream"#include "cstdio"#include "cstring"#…

__reduce__

一、__reduce__()介绍 当定义扩展类型时(也就是使用Python的C语言API实现的类型),如果你想pickle它们,你必须告诉Python如何pickle它们。 __reduce__ 被定义之后,当对象被Pickle时就会被调用。它要么返回一个代表全局名…

camel.js_Camel 2.11 –具有URL重写功能的HTTP代理路由

camel.js在即将发布的Apache Camel 2.11版本中,我最近添加了对将自定义url重写实现插入基于HTTP的路由(http,http4,jetty)的支持。 当您使用骆驼代理/桥接HTTP路由时,这使人们可以控制url映射。 例如&…

问题 1044: [编程入门]三个字符串的排序

题目描述输入三个字符串,按由小到大的顺序输出输入3行字符串输出按照从小到大输出成3行样例输入cde afg abc样例输出abc afg cde分析:可以使用java自带方法compareTo()进行两两比较,首先输入三个字符串a,b,c用a和b比较,如果a的值比…

使用JUnit 5进行更清洁的参数化测试

参数化单元测试的总体思路是对不同的数据运行相同的测试方法。 在JUnit 4中创建参数化测试远非完美。 现有体系结构存在许多问题:将参数定义为类字段,并且需要使用构造函数来创建它们,不能将参数化和非参数化测试混合在一个测试类中&#xff…

问题 1045: [编程入门]自定义函数之整数处理

题目描述输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数; ①输入10个数;②进行处理;③输出10个数。输入10个整数输出整理后的十个数,每个数后跟一个空格(注…

我曾经是怎么做面试官的

阅读提示 更新于2019年2月3日:本文过于注重技巧,很多内容笔者已不再使用。这是成长的必经过程,正如独孤求败的剑术精进之路,先注重技巧,再内化,变得不拘泥于形式。 纵然本文内容已不完全与笔者真正的面试风…

大数据摄取:Flume,Kafka和NiFi

初赛 在构建大数据管道时,我们需要考虑如何吸收出现在通常是Hadoop生态系统大门口的数据量,多样性和速度。 在决定采用哪种工具来满足我们的要求时,诸如可伸缩性,可靠性,适应性,开发时间成本等方面的初步考…

__repr__

class Item: def __init__ (self, name, price): self.name name self.price price # 创建一个Item对象,将之赋给im变量 im Item(鼠标, 29.8) # 打印im所引用的Item对象 print(im) 先看下面程序: 上面程序创建了一个 Item 对象,然后使用 p…

__getattribute__

在类 里面,其实并没有方法这个东西,所有的东西都保存在属性里面,所谓的调用方法其实是类里面的一个同名属性指向了一个函数(方法),返回的是函数的引用,再用 函数() 这种方式就可以调用它 在调用实例的方法的时候,实际上给对象传过去的只是一个字符串而已, 比如 t Test()…

使用精确的Java方法参数

了解如何在Java应用程序中选择正确的方法参数类型并获得更健壮和更短的代码。 我们Java开发人员通常有一个使用方法参数的坏习惯,即不考虑实际需要什么,而只是选择我们习惯的,可用的或首先想到的东西。 考虑以下代表性示例: pri…

Android external storage

File sdCard Environment.getExternalStorageDirectory(); File directory_pictures new File(sdCard, "Pictures"); Log.i(TAG,"directory_pictures"directory_pictures); 存储在external storage 这类文件不应该存在SD卡的根目录下,而应该存…

EnjoyingSoft之Mule ESB开发教程第六篇:Data Transform - 数据转换

目录 1. 数据转换概念2. 数据智能感知 - DataSense3. 简单数据转换组件3.1 Object to JSON3.2 JSON to XML3.3 JSON to Object3.4 XML to JSON4. 企业版的DataWeave Transformer(可视化高级数据转换器)5. 社区版的InfoMapper(自研的可视化数据转换器)本篇主要介绍在Mule ESB中使…

反射和内省_单例设计模式–内省和最佳实践

反射和内省定义: Singleton是“ 四人帮”设计模式的一部分,它属于创新设计模式。 在本文中,我们将更深入地研究Singleton模式的用法。 就建模而言,它是最简单的设计模式之一,但另一方面,就使用的复杂性而言…

福利预告,跳一跳助手即将发布,您不知道还有这些...

福利预告,跳一跳助手即将来临 一周后,即2月9号正式发布 跳一跳助手,免费免费免费提供! 透露一下 跳一跳助手的界面是这样滴: 这工具有啥用? 举个栗子: 花城君用该工具,不小心就玩到…

Redis Client Lettuce 5 GA发布

经过13个月的开发阶段和208张已解决的故障单&#xff0c;我很高兴宣布Lettuce 5.0全面上市。 这是一个主要发行版&#xff0c;带有一些重大更改&#xff0c;新的有趣功能以及Java 9兼容性。 从Maven Central获取发布 <dependency><groupId>io.lettuce</groupI…

NOIP模拟测试14「旋转子段·走格子·柱状图」

旋转子段 连60分都没想&#xff0c;考试一直肝t3&#xff0c;t2&#xff0c;没想到t1最简单 我一直以为t1很难&#xff0c;看了题解发现也就那样 题解 性质1 一个包含a[i]旋转区间值域范围最多为min(a[i],i)----max(a[i],i) 感性理解 举个例子,例如3 7 1 4 5 6 2 这个子段包含a…

检测域名是否到期

如果你想做一个网站&#xff0c;首先需要购买一个域名&#xff0c;与其说是购买不如说是租用&#xff0c;因为你要想使用这个域名&#xff0c;每年都需要缴纳一笔费用。既然是租用&#xff0c;所以就有期限&#xff0c;在到期前没有续费&#xff0c;则该域名会被收回&#xff0…

jax-ws cxf_走向REST:在Spring和JAX-RS(Apache CXF)中嵌入Jetty

jax-ws cxf对于服务器核心Java开发人员来说&#xff0c;向世界“展示”的唯一方法是使用API​​。 今天的帖子都是关于JAX-RS的 &#xff1a;使用Java编写和公开RESTful服务。 但是&#xff0c;我们不会使用涉及应用程序服务器&#xff0c;WAR打包以及诸如此类的传统的重量级方…

问题 1046: [编程入门]自定义函数之数字后移

题目描述有n个整数&#xff0c;使前面各数顺序向后移m个位置&#xff0c;最后m个数变成前面m个数。写一函数&#xff1a;实现以上功能&#xff0c;在主函数中输入n个数和输出调整后的n个数。输入输入数据的个数n n个整数 移动的位置m输出移动后的n个数样例输入10 1 2 3 4 5 6 7…