了解java.nio.file.Path – 1

介绍

Java的最后几个发行版本,即Java 7,Java 8和即将到来的Java 9,具有许多功能,这些功能使Java开发人员的生活更加轻松。 (我知道Java 9会使它变得更困难,但是只有在您采用新的范例时才可以。之后,它将变得更好)。

功能或API之一是Java 7中引入的File API的增强。该功能集的新类之一是java.nio.file.Path及其工厂java.nio.file.Paths

Maven依赖

我们将使用JUnit和AssertJ编写测试以演示API。

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version>
</dependency>
<dependency><groupId>org.assertj</groupId><artifactId>assertj-core</artifactId><!-- use 2.8.0 for Java 7 projects --><version>3.8.0</version><scope>test</scope>
</dependency>

创建

正如我之前java.nio.file.Paths提到的是java.nio.file.Path创建者就是它提供了两个工厂方法:

  • 静态路径get(字符串优先,字符串…更多)
  • 静态路径get(URI uri

可以用来获取java.nio.file.Path的实例。 让我们看一下获取实例的两种方法:

@Test
public void testPathCreation(){Path path = Paths.get("src", "main", "resources");assertThat(path.isAbsolute()).isFalse();assertThat(path.toString()).isEqualTo("src\\main\\resources");Path uriPath = Paths.get(URI.create("file:///Users/Mohamed/git"));assertThat(uriPath.isAbsolute()).isFalse();assertThat(uriPath.toAbsolutePath().toString()).isEqualTo("C:\\Users\\Mohamed\\git");
}

探索API

使用

此方法用于检查给定的Path对象是否以另一个Path对象或表示为String对象的路径结尾。

@Test
public void testEndsWith(){Path path = Paths.get("src", "main", "resources");assertThat(path.endsWith(Paths.get("main","resources"))).isTrue();assertThat(path.endsWith("resources")).isTrue();
}

使用

此方法返回出现在路径终端或路径末尾的目录或文件的名称。

@Test
public void testGetFileName(){Path path = Paths.get("src", "main", "resources");assertThat(path.getFileName().toString()).isEqualTo("resources");path = Paths.get("src", "test", "java", "info", "sanaulla","PathDemoTest.java");assertThat(path.getFileName().toString()).isEqualTo("PathDemoTest.java");
}

使用

此方法返回java.nio.file.FileSystem的实例,该实例表示基础文件系统。 我们将在以后的文章中详细讨论。

@Test
public void testGetFileSystem(){Path path = Paths.get("src", "main", "resources");assertThat(path.getFileSystem()).isNotNull();assertThat(path.getFileSystem().getSeparator()).isEqualTo("\\");path.getFileSystem().getRootDirectories().forEach(System.out::println);
}

使用

getNameCount()返回在文件分隔符分隔每个名称成分的路径中存在的名称成分的数量。 方法getName()获取索引,并在索引处返回名称组件。

例如,给定路径:/var/log/myapp/spring.log具有4个名称组件,并且组件位置基于0。 因此,索引1的名称部分是log。

@Test
public void testGetName(){Path path = Paths.get("src", "main", "resources");assertThat(path.getName(0)).isEqualTo(Paths.get("src"));assertThat(path.getName(path.getNameCount() - 1)).isEqualTo(Paths.get("resources"));
}

使用

该API从路径的根目录返回到终端目录或文件(即排除该路径)为止的路径。 例如:在代表/var/log/myapp/spring.pathPath实例上调用getParent()返回代表/ var / log / myappPath实例

如果给定路径没有父路径或它是根目录,则返回null。

@Test
public void testGetParent(){Path path = Paths.get("src", "main", "resources");assertThat(path.getParent()).isEqualTo(Paths.get("src", "main"));assertThat(Paths.get("/").getParent()).isNull();
}

使用getRoot

此API返回如果它存在的根或空的路径的给定实例的路径实例。

@Test
public void testGetRoot(){Path path = Paths.get("src", "main", "resources");assertThat(path.getRoot()).isNull();path = Paths.get("/users", "Mohamed", "git", "blogsamples");assertThat(path.getRoot()).isEqualTo(Paths.get("/"));
}

使用

这个API有点棘手。 它将删除路径中的多余元素。 冗余元素是那些元素的删除最终将导致相似的Path的元素。 例如:如果我们有路径src \ .. \ src \ main \ java等效于src \ main \ javanormalize() API有助于从前者实现后者。

@Test
public void testNormalize(){Path path = Paths.get("src","..", "src", "main", "resources", ".");assertThat(path.toString()).isEqualTo("src\\..\\src\\main\\resources\\.");assertThat(path.normalize().toString()).isEqualTo("src\\main\\resources");
}

使用

此方法返回由下限和上限标识的子路径,这些子路径作为参数传递给该方法。 计算子路径时排除上限。

@Test
public void testSubpath(){Path path = Paths.get("Mohamed", "git", "blogsamples", "src", "main", "resources");assertThat(path.subpath(2, 3).toString()).isEqualTo("blogsamples");assertThat(path.subpath(0, path.getNameCount()).toString()).isEqualTo("Mohamed\\git\\blogsamples\\src\\main\\resources");
}

使用

此方法返回给定路径的绝对路径。 绝对路径源自文件系统的根。

@Test
public void testToAbsolutePath(){Path path = Paths.get("src", "main", "resources");assertThat(path.toAbsolutePath().toString()).isEqualTo("C:\\Users\\Mohamed\\git\\blogsamples\\src\\main\\resources");
}

使用

这是创建java.io.File实例的非常方便的方法 。 我们可以利用创建具有多个文件夹级别的Path对象的用途,然后使用toFile()获取File的实例。

@Test
public void testToFile(){Path path = Paths.get("src", "main", "resources");File file = path.toFile();assertThat(file).isNotNull();assertThat(file.isDirectory()).isTrue();assertThat(file.exists()).isTrue();
}

使用

此方法可用于将符号链接解析为其实际位置。 要测试此API,我们创建一个符号链接:

在Windows上,您可以使用:

mklink /D "C:\blogsample" "C:\Users\Mohamed\git\blogsamples"

在Linux上,您将使用

ln -s /var/log/sample.log sample

该方法采用LinkOption类型的选项。 截至目前,该枚举具有一个元素,即NOFOLLOW_LINKS 。 如果通过此选项,则符号链接不会解析为其实际路径。

@Test
public void testToRealPath() throws IOException {Path path = Paths.get( "/blogsample");assertThat(path.toRealPath().toString()).isEqualTo("C:\\Users\\Mohamed\\git\\blogsamples");assertThat(path.toRealPath(LinkOption.NOFOLLOW_LINKS).toString()).isEqualTo("C:\\blogsample");
}

使用

此方法返回给定路径的URI表示形式。 通常,在Windows上,您会看到以下形式的文件:file:/// C:/ 。 但这取决于系统

@Test
public void testToUri(){Path path = Paths.get("src", "main", "resources");assertThat(path.toUri()).isEqualTo(URI.create("file:///C:/Users/Mohamed/git/blogsamples/src/main/resources/"));
}

注意 :需要注意的是,大多数API的返回类型都是java.nio.file.Path的实例。 这有助于我们链接多个方法并在单个java.nio.file.Path实例上调用它们。

在下一篇文章中,我们将研究java.nio.file.Path中其余的API。

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

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

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

相关文章

socket-01

对于所有的Web应用&#xff0c;本质上其实就是一个socket服务端&#xff0c;用户的浏览器其实就是一个socket客户端 转载于:https://www.cnblogs.com/yanhuaqiang/p/11329925.html

ActionScript3学习笔记2-包

在 ActionScript 3.0 中&#xff0c;包是用命名空间实现的&#xff0c;但包和命名空间并不同义。在声明包时&#xff0c; 可以隐式创建一个特殊类型的命名空间并保证它在编译时是已知的。显式创建的命名空间在 编译时不必是已知的。 下面的示例使用 package 指令来创建一个包含…

grep v grep_使用grep4j轻松测试分布式组件上的SLA

grep v grep因此&#xff0c;您的分布式体系结构如下图所示&#xff0c;您刚刚从企业那里收到了一项要求&#xff0c;以确保生产者发送并随后传输到下游系统&#xff08;消费者&#xff09;的消息的SLA必须快且永远不会慢于此。 400毫秒。 要求说&#xff1a; 从生产者发送到…

得到指定进程所有窗口。显示 影藏 置顶。

这里使用一个外挂程序测试&#xff0c;因为外挂程序没有做功能限制的处理 只是做了 窗口影藏。 全局变量 HWND hwnd[100]{0};int number0;DWORD Tpid0; 局部变量 char username[1028]; 先找到进程ID 1 HWND SelectPor() 2 { 3 bool isYesfalse; 4 string porcessName&q…

jquery部分方法

offset([coordinates]) 概述&#xff1a;获取匹配元素在当前视口的相对偏移。返回的对象包含两个整型属性&#xff1a;top 和 left。此方法只对可见元素有效。 比如&#xff0c;获取第二段的偏移&#xff1a; HTML 代码: <p>Hello</p><p>2nd Paragraph</p…

JUnit 5扩展模型的生命周期

JUnit5最终版本即将来临 &#xff08;当前是M4&#xff09;&#xff0c;我已经开始研究如何编写扩展。 在JUnit5中 &#xff0c;您没有使用Runners &#xff0c; Rules &#xff0c; ClassRules等&#xff0c;而是只有一个Extension API来实现自己的扩展。 JUnit5提供了多个接…

让IE6、IE7、IE8支持CSS3

我们都知道IE6&#xff0c;7并不支持CSS3的属性&#xff0c;IE8也不能很好的支持CSS3。但是有一个小脚本能够做到&#xff0c;它可以让IE支持 CSS3&#xff0c;包括&#xff1a;border-radius (rounded), box-shadow ( shadow), text-shadow等…… 如果你需要一个支持CSS3 的bo…

NOIP模拟测试16「Drink·blue·weed」

话说这次考试 Drink 非常棒的一道卡常练习题&#xff0c;适合练习卡常 真的很棒 前置卡常知识 1.char要比int快 char是最快的 输出putchar&#xff0c;输入getchar 在这个题快了7000豪 2.read 快读非常棒&#xff0c;让你变得更快&#xff0c;fread更棒&#xff0c;fread会爆炸…

Spring Boot Web Slice测试–示例

春天开机推出 测试切片而回&#xff0c;它已经采取了一些时间来解决它我的头&#xff0c;并探讨一些细微的差别。 背景 使用此功能的主要原因是减少样板。 考虑一个看起来像这样的控制器&#xff0c;仅适用于使用Kotlin编写的各种控制器。 RestController RequestMapping(&qu…

DECODE函数

DECODE函数相当于一条件语句(IF),它将输入数值与函数中的参数列表相比较&#xff0c;根据输入值返回一个对应值。函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然&#xff0c;如果未能与任何一个实参序偶匹配成功&#xff0c;则函数也有默认的返回值。区别于…

多线程练习

写两个线程&#xff0c;其中一个线程打印1-52&#xff0c;另一个线程打印A-Z&#xff0c;打印顺序应该是12A34B56C......5152Z。 该习题需要用到多线程通信的知识。 思路分析&#xff1a; 把打印数字的线程称为线程N&#xff0c;打印字母的线程称为线程L. 1.线程N完成打印后&am…

java jee curd_Java / JEE中的有效日志记录–映射的诊断上下文

java jee curd这一切始于当我和一位同事坐在一起解决一些应用程序问题时&#xff0c;当我注意到一些有趣的事情时。 他正在合并代码&#xff0c;我的眼睛吸引了此类“ org.apache.log4j.MDC”的注意。 这导致了以下发现&#xff1a; 什么是MDC&#xff1f; MDC代表“ 映射诊断…

Learning Cocos2d-x for WP8(7)——让Sprite动起来

C#(wp7)兄弟篇Learning Cocos2d-x for XNA&#xff08;7&#xff09;——让Sprite动起来 本讲将详细介绍Cocos2d-x游戏中动画Animate的创建方式&#xff0c;通过逐帧数组播放动画和创建动画集合播放动画&#xff0c;比较两者的异同&#xff0c;让Sprite动起来。 工程文件&#…

GWT的渐进式Web应用程序配方

渐进或不渐进… 如果您一段时间以来一直在设计或开发Web应用程序&#xff0c;那么您可能会遇到无数次“渐进式Web应用程序”一词&#xff0c;并且在未来几年内可能会这样做。 您可能想知道PWA的确切定义是什么&#xff0c;如何识别PWA&#xff0c;以及如何构建PWA。 根据字典&a…

问题 1047: [编程入门]报数问题

题目描述有n人围成一圈&#xff0c;顺序排号。从第1个人开始报数&#xff08;从1到3报数&#xff09;&#xff0c;凡报到3的人退出圈子&#xff0c;问最后留下的是原来的第几号的那位。输入初始人数n输出最后一人的初始编号样例输入3 样例输出2分析&#xff1a;因为每次报3都会…

NOIP模拟测试17「入阵曲·将军令·星空」

入阵曲 题解 应用了一种美妙移项思想&#xff0c; 我们先考虑在一维上的做法 维护前缀和$(sum[r]-sum[l-1])\%k0$可以转化为 $sum[r]\% ksum[l-1]\%k$开个桶维护一下即可 然后拓展到二维上 把两行之间所有行拍扁看作一维上的区间&#xff0c; 我们枚举两行和行之间所有列开个桶…

理解sizeof

1、sizeof返回的是字节个数&#xff0c;内存编址的最小单元是字节。因此&#xff0c;空对象&#xff0c;bool值占用的内存也是一个字节。 2、可以对哪些东西求sizeof ? a、对象和类型。如int a; sizeof(a)&#xff0c; sizeof(int)&#xff0c;二者是等价的。同一类型的对象&a…

java 分析java死锁_Java死锁示例–如何分析死锁情况

java 分析java死锁死锁是两个线程或多个线程永远被阻塞的编程情况&#xff0c;这种情况发生在至少两个线程和两个或更多资源的情况下。 在这里&#xff0c;我编写了一个简单的程序&#xff0c;它将导致死锁情况&#xff0c;然后我们将看到如何对其进行分析。 Java死锁示例 pac…

insert 多条数据 并且具有唯一标识符

DECLARE COUNT INT DECLARE NAME NVARCHAR(10) SET COUNT0 WHILE COUNT<1000 BEGIN SET NAMESYSTEMCAST(COUNT AS NVARCHAR(10)) INSERT INTO dbo.users VALUES (NEWID(),NAME,123123COUNT,DATEADD(DAY,COUNT,2012-12-12),GETDATE()) SET COUNT COUNT 1 END 转载于:http…

Java Message System简介

Java消息系统 在本文中&#xff0c;我将讨论面向消息的中间件 &#xff08;MOM&#xff09;以及JMS如何在Enterprise Java中实现它。 另外&#xff0c;我将讨论适合JMS使用的典型用例以及用于讨论消息传递解决方案的不同术语&#xff0c;例如Publisher / Sender &#xff0c; D…