文档章节

15.Java NIO Path 路径

逝去的回忆
 逝去的回忆
发布于 2016/11/19 17:06
字数 1042
阅读 152
收藏 0

Java的path接口是作为Java NIO 2的一部分是Java6,7中NIO的升级增加部分。Path在Java 7新增的。相关接口位于java.nio.file包下,所以Javaz内Path接口的完整名称是java.nio.file.Path.

一个Path实例代表一个文件系统内的路径。path可以指向文件也可以指向目录。可以使相对路径也可以是绝对路径。绝对路径包含了从根目录到该文件(目录)的完整路径。相对路径包含该文件(目录)相对于其他路径的路径。相对路径听起来可能有点让人头晕。但是别急,稍后我们会详细介绍。

不要把文件系统中路径和环境变量的路径混淆。java.nio.file.Path和环境变量没有任何关系。

在很多情况下java.no.file.Path接口和java.io.File比较相似,但是他们之间存在一些细微的差异。尽管如此,在大多数情况下,我们都可以用File相关类来替换Path接口。

创建Path实例(Creating a Path Instance)

为了使用java.nio.file.Path实例我们必须创建Path对象。创建Path实例可以通过Paths的工厂方法get()。下面是一个实例:

import java.nio.file.Path;
import java.nio.file.Paths;

public classs PathExample {
  public static void mian(String[] args) {
    Path = path = Paths.get("c:\\data\\myfile.txt");
  }
}

注意上面的两个import声明。需要使用Path和Paths的接口,毕现先把他们引入。

其次注意Paths.get("c:\data\myfile.txt")的调用。这个方法会创建一个Path实例,换句话说Paths.get()是Paths的一个工厂方法。

创建绝对路径(Creating an Absolute Path)

创建绝对路径只需要调动Paths.get()这个工厂方法,同时传入绝对文件。这是一个例子:

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

对路径是c:\data\myfile.txt,里面的双斜杠\字符是Java 字符串中必须的,因为\是转义字符,表示后面跟的字符在字符串中的真实含义。双斜杠\表示\自身。

上面的路径是Windows下的文件系统路径表示。在Unixx系统中(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

创建相对路径(Creating a Relative Path)

相对路径是从一个路径(基准路径)指向另一个目录或文件的路径。完整路径实际上等同于相对路径加上基准路径。

Java NIO的Path类可以用于相对路径。创建一个相对路径可以通过调用Path.get(basePath, relativePath),下面是一个示例:

Path projects = Paths.get("d:\\data", "projects");

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

第一行创建了一个指向d:\data\projects的Path实例。第二行创建了一个指向d:\data\projects\a-project\myfile.txt的Path实例。 在使用相对路径的时候有两个特殊的符号:

  • .
  • ..

.表示的是当前目录,例如我们可以这样创建一个相对路径:

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

currentDir的实际路径就是当前代码执行的目录。 如果在路径中间使用了.那么他的含义实际上就是目录位置自身,例如:

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

.和..也可以结合起来用,这里不过多介绍。

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);

这段代码的输出如下:

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

© 著作权归作者所有

共有 人打赏支持
上一篇: 14. Java NIO vs IO
下一篇: 16. Java NIO Files
逝去的回忆
粉丝 13
博文 136
码字总数 219872
作品 0
深圳
高级程序员
私信 提问
Java NIO系列教程(十六) Java NIO Files

原文地址 译者:章筱虎 java NIO Files类(java.nio.file.Files) 提供了操作文件的相关方法。本篇文章将会覆盖大多数常用的方法。Files类包含了很多方法,如果你需要的功能在文中没有提及,需...

章 筱虎
2018/01/23
0
0
16. Java NIO Files

Java NIO中的Files类(java.nio.file.Files)提供了多种操作文件系统中文件的方法。本节教程将覆盖大部分方法。Files类包含了很多方法,所以如果本文没有提到的你也可以直接查询JavaDoc文档。...

逝去的回忆
2016/11/19
25
0
NIO.2特性总结(一)灵活的Path

NIO.2,More New I/O APIs for the Java Platform。 技术发展实在太快,NIO都没弄透,java7中的NIO2又要开始进入我们的程序,优化系统的性能了。最近在看《PRO Java 7 NIO.2》CSDN上有下载,...

Gaischen
2012/12/01
0
3
java程序员修炼之道02--NIO

第二章:新I/O 1.他完全取代了java.io.File与文件系统的交互 2.塔提供了新的异步处理类,让你无需手动配置线程池和其他底层并发控制,便可在后台线程中执行文件和网络I/O操作 NIO2将位置(Path...

zhchl2010
2015/09/21
65
0
Nio 中的方法 - 文件上传

原文 MINA nio 基本用法 createDirectory - 创建目录 示例

lemos
2017/04/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里云vpc、快照、镜像、重置密码_重启_关机、磁盘扩容

VPC 专有网络VPC(Virtual Private Cloud)是用户基于阿里云创建的自定义私有网络, 不同的专有网络之间二层逻辑隔离,用户可以在自己创建的专有网络内创建和管理云产品实例,比如ECS、负载均...

李超小牛子
15分钟前
0
0
阿里高级技术专家:研发效能的追求永无止境

背景 大约在5年前,也就是2013年我刚加入阿里的时候,那个时候 DevOps 的风刚吹起来没多久,有家公司宣称能够一天发布几十上百次,这意味着相比传统软件公司几周一次的发布来说,他们响应商业...

阿里云官方博客
44分钟前
1
0
Android 的 ViewModel 机制源码解析

Android ViewModel 的好处是会随 Activity 销毁调用它的 clear() 方法。 我们分析一下它是怎么做到的。 1. 例子使用: a、 创建类 TestMvvmViewModel 继承 ViewModel,重写 onCleared() ,把...

亭子happy
54分钟前
2
0
WEB 开发总结

事务处理 事务的4个基本特征 1.Atomic(原子性),事务中包含的操作被看做是一个整体的业务单元,这个业务单元中的操作要么全部成功,要么全部失败,不会出现部分成功,部分失败的场景。 2....

北漂的我
今天
3
0
thinkphp5 利用七牛云 将amr格式语音文件转为mp3

$card_id 是我的本地的文件 将问价名字的后缀名去掉注意access_token的有效期public function ceshi1($card_id){ $mediaid = substr($card_id, 0, -4); $accessKey = ...

小小小壮
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部