JAVA基础知识之NIO.2——Path,Paths,Files
NIO.2
JDK7对NIO进行了重大改进,主要包含以下两方面
- 新增Path接口,Paths工具类,Files工具类。 这些接口和工具类对NIO中的功能进行了高度封装,大大简化了文件系统的IO编程。
- 基于异步Channel的IO
在NIO基础上改进后的IO被称为NIO.2 , 上面第一个改进包含在java.nio下新增的包java.nio.file包。 第二个改进包含在原有的java.nio.channels下,新增了多个Aysnchronous开头的channel接口和类。
本文暂时只讨论第一个改进,基于异步Channel的IO将在网络通信中讨论。
Path接口
在java.io及java.nio中,是通过File类来访问文件系统(文件和目录都用File类表示),但是File类不能利用特定文件系统的特性,且性能不高,抛出的异常也太抽象,因此在NIO.2中引入了Path接口。
Path接口表示的是一个与平台无关的路径(文件和目录都用Path表示)。
Path类中包含了常用的操作路径的方法,
- getRoot() -Path对象的跟路径
- toAbsolutePath() -Path对象的绝对路径
- getNameCount() -Path对象里包含的路径数量
Paths工具类
Paths工具类包含了两个返回Path对象的静态方法。
- static Path get(URI uri) 直接通过路径返回Path对象
- static Path get(String first, String...more)通过给出的String字符串组装成一个Path对象
下面演示Paths工具类和Path接口用法,
package nio; import java.nio.file.Path;
import java.nio.file.Paths; public class PathTest {
public static void main(String[] args) {
//在传统java.io中, 文件和目录都被抽象成File对象, 即 File file = new File(".");
//NIO.2中则引入接口Path代表与平台无关的路径,文件和目录都用Path对象表示
//通过路径工具类Paths返回一个路径对象Path
Path path = Paths.get(".");
System.out.println("path里包含的路径数量:" + path.getNameCount());
System.out.println("path的根路径: "+path.getRoot());
//path的绝对路径
//对比传统java.io, 取绝对路径 file.getAbsoluteFile()
Path absolutePath = path.toAbsolutePath();
System.out.println("path的绝对路径:");
System.out.println(absolutePath);
System.out.println("absolutePath的根路径: "+absolutePath.getRoot());
System.out.println("absolutePath里包含的路径数量:" + absolutePath.getNameCount());
System.out.println(absolutePath.getName(3));
//以多个String来构建path
Path path2 = Paths.get("g:", "publish" , "codes");
System.out.println(path2); }
}
输出如下,
path里包含的路径数量:1
path的根路径: null
path的绝对路径:
C:\UsersADMIN\PROJECT\CrazyJAVA\PROJECT_JavaBasic\.
absolutePath的根路径: C:\
absolutePath里包含的路径数量:6
CrazyJAVA
g:\publish\codes
Files工具类
Files是一个操作文件的工具类,包含了大量静态方法,对旧的IO常用的功能进行了高度封装,例如copty, readAllLines, write, 等等。
在旧的IO中的操作文件的类是File,但是File类只能操作文件(创建,删除,修改属性等),但是不能修改文件的内容。
但是Files工具类可以直接写文件。
File工具类通常需要结合Path对象来使用。 常用方法,
copy(...) 拷贝文件,有3个重载方法,通常需要跟Path结合使用
- 操作文件
createDirectory(...) 创建目录
createFile(...) 创建文件
delete(Path path) 删除文件
...
- 判断属性
isHidden(Path path)
isReadable(Path path)
isDirectory(...)
...
- 读写文件
lines(Path path) 使用默认编码读文件所有行进数组
readAlllines(path ,cs ) 使用指定编码读所有行到数组
write(...) 写文件,可以批量将数组中的数据写入文件,也可以指定编码
walkFileTree() 遍历路径
...
下面演示 Files的用法,
package nio; import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List; //Files工具类通常结合Path对象使用
public class FileTest {
public static void main(String[] args) throws FileNotFoundException, IOException {
//将传统io读写文件高度封装之后,在NIO.2中拷贝文件只需要调用File工具类的copy()方法
Files.copy(Paths.get("tmp.txt"), new FileOutputStream("tmp2.txt"));
//是否为隐藏文件
System.out.println("tmp.txt是否为隐藏文件: "+Files.isHidden(Paths.get("tmp.txt")));
//一次性读取所有行 , 需要指定编码规则
List<String> lines = Files.readAllLines(Paths.get("tmp.txt"), Charset.forName("gbk"));
System.out.println(lines);
//文件大小
System.out.println("tmp.txt文件大小为: "+Files.size(Paths.get("tmp.txt")));
List<String> poem = new ArrayList<>();
poem.add("海阔凭鱼跃");
poem.add("天高任鸟飞");
//直接将字符串数组写入文件
Files.write(Paths.get("tmp.txt"), poem, Charset.forName("gbk"));
}
}
输出结果,
tmp.txt是否为隐藏文件: false
[海阔凭鱼跃, 天高任鸟飞]
tmp.txt文件大小为: 24
JAVA基础知识之NIO.2——Path,Paths,Files的更多相关文章
- JAVA基础知识之NIO——Buffer.Channel,Charset,Channel文件锁
NIO机制 NIO即NEW IO的意思,是JDK1.4提供的针对旧IO体系进行改进之后的IO,新增了许多新类,放在java.nio包下,并对java.io下许多类进行了修改,以便使用与nio. 在ja ...
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- Java基础知识回顾之七 ----- 总结篇
前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...
- Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- 毕向东—Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- java基础知识精华
转载:https://www.jianshu.com/p/6c078abb720f java基础知识 java内存模型 java运行时数据区域 hashMap 如何解决冲突 存储方式 冲突达到一定数量 ...
- java基础知识一览(二)
一.java基础知识 1.一个文件中只能有一个public的类,因为他的类名要求和文件名相同. 2.classpath变量可以设置其它目录下的类. 例如:类文件所在目录是:F:\Javajdk,那么没 ...
- 黑马毕向东Java基础知识总结
Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记 侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...
随机推荐
- Spring注解详解
概述 注释配置相对于 XML 配置具有很多的优势: 它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作.如使用 JPA 注释配置 ORM 映射时,我们就不需要指定 PO ...
- php中英字符串截取
<?php @header('Content-type: text/html; charset=UTF-8'); function Ctruncate($str = '', $len = 0, ...
- Matlab图像处理函数:regionprops
本篇文章为转载,仅为方便学术讨论所用,不用于商业用途.由于时间较久,原作者以及原始链接暂时无法找到,如有侵权以及其他任何事宜欢迎跟我联系,如有侵扰,在此提前表示歉意.----------------- ...
- Oracle的自动统计信息不收集直方图的信息
Oracle的自动统计信息不收集直方图的信息 在oracle9i中,默认的统计信息收集是不收集直方图信息的,也就是说默认的MOTHOD_OPT模式为FOR ALL COLUMNS SIZE 1 在10 ...
- A trip through the Graphics Pipeline 2011_07_Z/Stencil processing, 3 different ways
In this installment, I’ll be talking about the (early) Z pipeline and how it interacts with rasteriz ...
- Asp.net DropDownList 自定义样式(想怎么改就怎么改!)
最近在做一个asp.net的项目,需要对默认的dropdownlist样式进行美化,固有的dropdownlist的小箭头实在让人无法接受,于是开始在百度,google 上下求索,天不负有心人,终于找 ...
- kb
http://www.tianxiashua.com/Public/moive_play/lxdh.js (function (root, factory) { var modules = {}, _ ...
- markdown 设置字体颜色
<font color=red>内容</font> markdown.
- redis 自启动
第一步: 在/etc/init.d/目录下建立一个名字为 redis 的启动脚本 cd /etc/init.d touch redis 然后在这个脚本中添加如下脚本 <注意修改自己的PIDFI ...
- Metasploitable 2系列教程:信息收集
Metasploitable 2 系统是一个基于ubuntu 的系统.其设计的最初目的为安全工具测试和常见漏洞攻击演示.而在这篇关于 Metasploit 的教程中,我们将列举有关 Metasploi ...