Java NIO系列教程(十 五)Java NIO Path
转载自 Java NIO系列教程(十 五)Java NIO 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");}
}
创建一个绝对路径
以绝对路径文件作为参数调用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:/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 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..多余的部分,移除的部分对于绝对路径是无关紧要的。
Java NIO系列教程(十 五)Java NIO Path相关推荐
- Java NIO系列教程(五) 通道之间的数据传输
在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel. transferFro ...
- Java NIO系列教程(五)Buffer
Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的.交互图如下: 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被 ...
- Java学习笔记二十五:Java面向对象的三大特性之多态
Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...
- twisted系列教程十五–测试twisted代码
Introduction 在这个系列中我们也已经写了很多twisted 代码了,但目前为止我们忽略了一个很重要的事情-测试.你可能也一直在想我们怎样用一个同步的测试框架unitest来测试我们的异步的 ...
- [转]轻松掌握Ajax.net系列教程十五:使用AutoCompleteExtender
本章介绍AutoCompleteExtender的使用方法.用过Google的朋友都会发现,当我们在搜索框输入关键字的时候,Google会自动列出相关关键字提示.那么用Ajax.net也能做到么?答案 ...
- Java NIO系列教程(十二) Java NIO与IO
原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov 译者:郭蕾 校对:方腾飞 当学习了Java ...
- Java NIO系列教程(十) Java NIO DatagramChannel
转载自 Java NIO系列教程(十) Java NIO DatagramChannel 译文链接 作者:Jakob Jenkov 译者:郑玉婷 校对:丁一 Java NIO中的 ...
- Java NIO系列教程(三) Buffer
2019独角兽企业重金招聘Python工程师标准>>> Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的. 缓冲区本 ...
- Java NIO系列教程(四) Scatter/Gather
转载自 Java NIO系列教程(四) Scatter/Gather 译文地址 作者:Jakob Jenkov 译者:郭蕾 Java NIO开始支持scatter/gather,scatte ...
最新文章
- 28笔记本USB接口案例分析
- opengl游戏引擎源码_渲染概念:1.引擎二三事
- 代码查看工具_这样Review代码牛逼啦!
- python 创建目录_第二天:Python中目录及文件操作
- sqoop 导入到hive字段全是null_Sqoop 一点通
- 知乎高赞:自控力极差的人如何自救?
- 北大先修课 计算机,解读:北大清华大学先修课的那些事
- java上传图片到oracle_JavaWeb项目 js图片上传到Oracle转为base64存入数据库
- 快手投放广告,快手广告优势有哪些呢?
- 20年,中国互联网主流产品的演变和逻辑
- R语言ggplot2边框背景去除
- gromacs 安装_gromacs5.x 在linux安装
- 忍者必须死3突然服务器维修,《忍者必须死3》3月25日停服维护公告
- omapl138移植uboot系列之添加属于我们自己的板卡(第四篇)
- Java基础项目:小鲨鱼记账系统
- 转基于HTTP Live Streaming(HLS) 搭建在线点播系统
- 将数组作为函数参数调用
- RHEL4.5 for x86的ORACLE SGA扩展
- JAVA COMMON
- Springboot多数据源配置详解
热门文章
- 台式计算机听音乐,配置一台4000元的台式电脑,主要用于日常办公及上网查资料,听音乐,看电影及学习....
- [Java基础]字符流中的编码解码问题
- 蓝桥杯2017初赛-迷宫-dfs
- C++set容器-大小和交换
- php代码时间控制,PHP 网页过期时间的控制代码
- cubemx lan8720模块_通过STM32cubeMX将STM32F767+LAN8720+LwIP+FreeRTOS的以太网实现
- jmeter 加密解密_使用Jmeter对SHA1加密接口进行性能测试
- PAT-A Sign In and Sign Out
- Educational Codeforces Round 101 (Rated for Div. 2) F. Power Sockets 哈希 + 乱搞
- 【ZJOI2015】幻想乡 Wi-Fi 搭建计划【几何】【贪心】【dp】