Java NIO系列教程(十 五)Java NIO Path

转载自  Java NIO系列教程(十 五)Java NIO Path

译文链接  译者:章筱虎

Java的Path接口是Java NIO2 的一部分,是对Java6 和Java7的 NIO的更新。Java的Path接口在Java7 中被添加到Java NIO,位于java.nio.file包中, 其全路径是java.nio.file.Path。

一个Path实例代表了一个文件系统中的路径。一个路径可以指向一个文件或者一个文件夹。一个路径可以是绝对路径或者是相对路径。绝对路径是从根路径开始的全路径,相对路径是一个相对其他路径的文件或文件夹路径。相对路径可能会造成一点混乱,但是不要担心,在本文章中,我会详细解释相对路径的。

不要混淆了文件系统中的路径 和 操作系统中环境变量的path路径。java.nio.file.Path实例与环境变量中的path没有任何关系。

在很多地方java.nio.file.Path接口和java.io.File类是相似的,但是它们有几个主要的不同。 在很多类中,你可以使用Path 接口替换 file 类使用。

创建一个Path实例

要想使用 一个 Path实例,你必须要先创建一个Path实例,可以使用Paths类 (java.nio.file.Paths)中的静态方法 Path.get()创建。 下面是一个例子

import java.nio.file.Path;
import java.nio.file.Paths;public class PathExample {public static void main(String[] args) {Path path = Paths.get("c:\\data\\myfile.txt");}
}

注意例子中两个import语句,为了能够适应Path实例和Paths类,必须要引入它们。 其次,注意Paths.get(“c:\data\myfile.txt”)方法的调用,这个方法是创建一个Path实例。 换句话说,Paths.get() 方法是一个创建Path实例的工厂方法。

创建一个绝对路径

以绝对路径文件作为参数调用Paths.get()工厂方法后就是创建一个绝对Path实例,例子如下

Path path = Paths.get("c:\\data\\myfile.txt");

c:\data\myfile.txt就是绝对路径,由于java中一个 \ 是转义字符,所以要写成两个 \ ,\就是告诉java编译器变成一个 \ 放到字符串中。

上面的是Windows操作系统中写法,在Unix操作系统中(Linux, MacOS, FreeBSD 等等),上面路径类似写成:

Path path = Paths.get("/home/jakobjenkov/myfile.txt");

现在绝对路径是 /home/jakobjenkov/myfile.txt

如果你在windows系统中使用 以 / 开头的路径,那么就会被理解为相对于当前驱动器,

/home/jakobjenkov/myfile.txt

会从C盘根目录开始解析,最终的全路径就是:

C:/home/jakobjenkov/myfile.txt

##创建一个相对路径

相对路径是指以一个路径(基本路径)指向 一个文件或者文件夹的路径,它的绝对路径会结合基本路径推算 出来。

Java NIO Paths类也可以用来创建相对路径的实例。你可以是使用Paths.get(basePath, relativePath)方法创建一个相对路径的实例。

Path projects = Paths.get("d:\\data", "projects");Path file     = Paths.get("d:\\data", "projects\\a-project\\myfile.txt");

第一行代码是创建一个指向 d:\data\projects 文件夹路径的 实例,第二行代码是创建一个 指向d:\data\projects\a-project\myfile.txt文件路径的实例。

当使用相对路径使用,有两个特别的符号可以被包含在路径的字符串中,符号如下:

  • .
  • ..

“.” 代表当前目录,如果你创建一个相对Path实例:

Path currentDir = Paths.get(".");
System.out.println(currentDir.toAbsolutePath());

上面例子中Path实例的绝对路径就是该代码运行时的目录的绝对路径。

如果 . 在 路径字符串的中间位置,就是指向同一个目录(译者注:就相当于不加 . 一样),例子:

Path currentDir = Paths.get("d:\\data\\projects\.\a-project");

上面路径就是和下面路径一致

d:\data\projects\a-project

.. 代表父目录或者是上一级目录,示例:

Path parentDir = Paths.get("..");

上面例子中Path实例的绝对路径就是该代码运行时的父目录的绝对路径。

如果 .. 在路径字符串的中间位置,相当于指向了上一级目录,例子:

String path = "d:\\data\\projects\\a-project\\..\\another-project";
Path parentDir2 = Paths.get(path);

上面路径和下面路径一致

d:\data\projects\another-project

a-project后面的 .. 改变了目录指向上一级父目录 project ,然后再参照 父目录project,指向下一级目录another-project

. 和 .. 可以在Paths.get() 方法中结合使用,示例

Path path1 = Paths.get("d:\\data\\projects", ".\\a-project");Path path2 = Paths.get("d:\\data\\projects\\a-project","..\\another-project");

Path.normalize()方法

Path接口中的normalize()可以标准化一个路径。标准化意思是解析路径中的. 和 .. 。例子如下:

String originalPath ="d:\\data\\projects\\a-project\\..\\another-project";Path path1 = Paths.get(originalPath);
System.out.println("path1 = " + path1);Path path2 = path1.normalize();
System.out.println("path2 = " + path2);

代码开始使用.. 创建Path实例,使用路径字符串创建实例后,并把Path实例打印出来(也就是调用Path.toString()方法)。

调用创建的Path实例后,返回一个新的Path实例,这个新的,标准的Path实例最后也打印出来。

上面代码打印的内容如下:

path1 = d:\data\projects\a-project\..\another-project
path2 = d:\data\projects\another-project

我们可以看到规范化的路径没有包含a-project..多余的部分,移除的部分对于绝对路径是无关紧要的。


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

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

相关文章

discuz 版块导航function_forumlist.php,Discuz! X2“扩建”左侧版块导航 让社区层次一目了然...

一般情况下,当社区具有大量栏目和版块的时候,用户往往很容易迷失其中,不清楚自己所在的版块位置,同时也很难找到“目的”版块,容易造成不良的用户体验。Discuz!X2针对此问题在“用户体验”方面做了深度优化。Discuz!X2…

学习ASP.NET Core,你必须了解无处不在的“依赖注入”

ASP.NET Core的核心是通过一个Server和若干注册的Middleware构成的管道,不论是管道自身的构建,还是Server和Middleware自身的实现,以及构建在这个管道的应用,都需要相应的服务提供支持,ASP.NET Core自身提供了一个DI容…

Java 进程间文件锁FileLock详解

转载自 Java 进程间文件锁FileLock详解最近需要在两个进程中对同一个文件进行操作,正好Java 提供了文件锁FileLock类,利用这个类可以控制不同程序(JVM)对同一文件的并发访问,实现进程间文件同步操作。FileLock是java 1.4 版本后出现的一个类…

求瑞年的java程序,java 计算瑞年的方法

任何语言都有可能计算某一年是否为瑞年的方法,也就是说一年有 366 天,每隔4 年就出现一次。最基本的算法如下:if year is divisible by 400 thenis_leap_yearelse if year is divisible by 100 thennot_leap_yearelse if year is divisible b…

购物车的功能——JS源码

此CSS的对应的是“购物车的功能——界面源码”的内容和“购物车的功能——CSS源码”的内容,希望大家不要乱 $(function(){//点击复选框全选或全不选效果$("#allCheckBox").click(function(){var checked$(this).is(":checked");$(".cart_t…

.NET Core应用类型(Portable apps amp; Self-contained apps)

介绍 有许多种方式可以用来考虑构建应用的类型,通常类型用来描述一个特定的执行模型或者基于此的应用。举例说:控制台应用(Console Application)、Web应用(Web Application)等等。所有这些类型的应用都可以…

Java NIO系列教程(十二) Java NIO与IO

转载自 Java NIO系列教程(十二) Java NIO与IO 译文地址 作者:Jakob Jenkov 译者:郭蕾 校对:方腾飞 当学习了Java NIO和IO的API后,一个问题马上涌入脑海: 我应该何时使用IO,何…

php oracle 无查询结果,php - Oracle Insert查询不起作用,也不会抛出任何错误 - 堆栈内存溢出...

嗨,我是Oracle的新手。我试图在PHP中使用oracle将记录插入表中。 但它不起作用,也没有抛出任何错误。以下是我的代码。 请告诉我我做错了什么。$insertSQL "INSERT INTO GL_USR_MAIL_FOLDER(FK_GLUSR_USR_ID, GL_USR_MAIL_FOLDER_NAME) VALUES (:US…

.NET Core 1.0发布:微软开源跨平台大布局序幕

在6月27日的红帽DevNation峰会上,微软正式发布了.NET Core 1.0、ASP.NET 1.0和Entity Framework Core 1.0,这些产品将全部支持Windows、OS X和Linux三种操作系统。其中.NET Core最受瞩目,这是一款跨平台、开源且模块化的.NET平台,…

无缝滚动图片——源码

图片已上传&#xff0c;请到我的资源部去下载&#xff0c;不用积分&#xff0c;——无缝滚动图片http://download.csdn.net/detail/qq_34137397/9665933 </head> <body> <div class"control"><label id"chk_pause"><input type…

Java NIO系列教程(十一) Pipe

转载自 Java NIO系列教程&#xff08;十一&#xff09; Pipe 原文链接 作者&#xff1a;Jakob Jenkov 译者&#xff1a;黄忠 校对&#xff1a;丁一 Java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道&#…

配置oracle网络连接命令,配置oracle网络环境

向数据库注册实例的方法有静态注册和动态注册两种。对于静态注册来说&#xff0c;我们可以将一列硬编码在listener.ora文件中。动态注册意味着实例在启动时要定位侦听器并注册到侦听器中。动态注册是向侦听器注册一个实例的首选方法&#xff0c;初始化参数LOCAL_LISTENER会告知…

ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)

在上一节&#xff08;ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行&#xff09;中提到ASP.NET Core WebApp 必须含有Startup类,在本节中将重点讲解Startup类以及Middleware(中间件)在Startup类中的使用。 Startup Class Startup Class中含有两个重要方法&#xff1a;Con…

oracle中闪回和回滚,oracle闪回操作详解

Oracle的闪回oracle中为什么会有闪回呢&#xff01;它的作用是什么呢&#xff1f;我们来学习一下闪回吧&#xff01;闪回和回滚异曲同工之妙。一闪回的介绍(1)在Oracle的操作工程中&#xff0c;会不可避免地出现操作失误或者用户失误&#xff0c;例如不小心删除了一个表等&…

Java NIO系列教程(十) Java NIO DatagramChannel

转载自 Java NIO系列教程&#xff08;十&#xff09; Java NIO DatagramChannel 译文链接 作者&#xff1a;Jakob Jenkov 译者&#xff1a;郑玉婷 校对&#xff1a;丁一 Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议&#xff0c…

在Windows Server 2012 R2 Standard 部署 ASP.NET Core程序

前言&#xff1a; 随着ASP.NET Core 1.0的发布&#xff0c;论坛里相关的文章也越来越多&#xff0c;正好有时间在测试环境上搭建 ASP.NET Core的发布环境&#xff0c;把过程中遇到的问题写给大家&#xff0c;以便有用到的朋友需要。 环境&#xff1a; Windows Server 2012 R2 S…

Github Pages + Jekyll 独立博客一小时快速搭建上线指南

只要一小时&#xff1f;&#xff01; 人生道路上布满了坑&#xff0c;于是有了人生导师。 美丽的地球上布满了坑&#xff0c;于是有了Google Earth。 使用Github Pages搭建独立博客的过程中布满了坑&#xff0c;所以有了这篇指南。 我在自己查找资料搭建的过程中发现了许多大…

Java NIO系列教程(九) ServerSocketChannel

转载自 Java NIO系列教程&#xff08;九&#xff09; ServerSocketChannel 译文链接 作者&#xff1a;Jakob Jenkov 译者&#xff1a;郑玉婷 校对&#xff1a;丁一 Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的Server…

ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First

ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库。 Entity Framework Core 1.0 也已经发布了&#xff0c;可以适用于 .NET Core 1.0 及ASP.NET Core 1.0 。 EF Core RC2 时&#xff0c;使用的Code First&#xff1a; http://w…

Oracle 分页语句解释,oracle 分页语句

private static final String QUERYPERPAGESQL "select * from (select m.*, rownum rn from (select * from music order by id) m where rownum < ?) where rn > ?";//该sql语句为每页显示的个数public List queryPerPage(int page) {//page为当前处于第几…