NIO.2中Path、Paths、Files类的使用

Java NIO 概述

​ Java NIO (New IO,Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的(IO是面向流的)、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。

Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。

  • –>java.nio.channels.Channel

    • –>FileChannel:处理本地文件
    • –>SocketChannel:TCP网络编程的客户端的Channel
    • –>ServerSocketChannel:TCP网络编程的服务器端的Channel
    • –>DatagramChannel:UDP网络编程中发送端和接收端的Channel

Path、Paths和Files核心API

Path可以看成是File类的升级版本

import java.io.File;
File file = new File("index.html");
等同于:
import java.nio.file.Path;
import java.nio.file.Paths;
Path path = Paths.get("index.html");

同时,NIO.2在java.nio.file包下还提供了Files、Paths工具类,Files包含了大量静态的工具方法来操作文件;Paths则包含了两个返回Path的静态工厂方法。

Paths 类提供的静态 get() 方法用来获取 Path 对象:

  • static Path get(String first, String … more) : 用于将多个字符串串连成路径

  • static Path get(URI uri): 返回指定uri对应的Path路径

Path接口

Path 常用方法:

  • String toString() : 返回调用 Path 对象的字符串表示形式

  • boolean startsWith(String path) : 判断是否以 path 路径开始

  • boolean endsWith(String path) : 判断是否以 path 路径结束

  • boolean isAbsolute() : 判断是否是绝对路径

  • Path getParent() :返回Path对象包含整个路径,不包含 Path 对象指定的文件路径

  • Path getRoot() :返回调用 Path 对象的根路径

  • Path getFileName() : 返回与调用 Path 对象关联的文件名

  • int getNameCount() : 返回Path 根目录后面元素的数量

  • Path getName(int idx) : 返回指定索引位置 idx 的路径名称

  • Path toAbsolutePath() : 作为绝对路径返回调用 Path 对象

  • Path resolve(Path p) :合并两个路径,返回合并后的路径对应的Path对象

  • File toFile(): 将Path转化为File类的对象

测试:

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;import org.junit.Test;public class PathTest {//如何使用Paths实例化Path@Testpublic void test1() {Path path1 = Paths.get("d:\\nio\\hello.txt");//new File(String filepath)Path path2 = Paths.get("d:\\", "nio\\hello.txt");//new File(String parent,String filename);System.out.println(path1);System.out.println(path2);Path path3 = Paths.get("d:\\", "nio");System.out.println(path3);}//Path中的常用方法@Testpublic void test2() {Path path1 = Paths.get("d:\\", "nio\\nio1\\nio2\\hello.txt");Path path2 = Paths.get("hello.txt");//        String toString() : 返回调用 Path 对象的字符串表示形式System.out.println(path1);//     boolean startsWith(String path) : 判断是否以 path 路径开始System.out.println(path1.startsWith("d:\\nio"));
//      boolean endsWith(String path) : 判断是否以 path 路径结束System.out.println(path1.endsWith("hello.txt"));
//      boolean isAbsolute() : 判断是否是绝对路径System.out.println(path1.isAbsolute() + "~");System.out.println(path2.isAbsolute() + "~");
//      Path getParent() :返回Path对象包含整个路径,不包含 Path 对象指定的文件路径System.out.println(path1.getParent());System.out.println(path2.getParent());
//      Path getRoot() :返回调用 Path 对象的根路径System.out.println(path1.getRoot());System.out.println(path2.getRoot());
//      Path getFileName() : 返回与调用 Path 对象关联的文件名System.out.println(path1.getFileName() + "~");System.out.println(path2.getFileName() + "~");
//      int getNameCount() : 返回Path 根目录后面元素的数量
//      Path getName(int idx) : 返回指定索引位置 idx 的路径名称for (int i = 0; i < path1.getNameCount(); i++) {System.out.println(path1.getName(i) + "*****");}//       Path toAbsolutePath() : 作为绝对路径返回调用 Path 对象System.out.println(path1.toAbsolutePath());System.out.println(path2.toAbsolutePath());
//      Path resolve(Path p) :合并两个路径,返回合并后的路径对应的Path对象Path path3 = Paths.get("d:\\", "nio");Path path4 = Paths.get("nioo\\hi.txt");path3 = path3.resolve(path4);System.out.println(path3);//        File toFile(): 将Path转化为File类的对象File file = path1.toFile();//Path--->File的转换Path newPath = file.toPath();//File--->Path的转换}
}

Files类

java.nio.file.Files 用于操作文件或目录的工具类。

Files常用方法:

  • Path copy(Path src, Path dest, CopyOption … how) : 文件的复制

  • Path createDirectory(Path path, FileAttribute<?> … attr) : 创建一个目录

  • Path createFile(Path path, FileAttribute<?> … arr) : 创建一个文件

  • void delete(Path path) : 删除一个文件/目录,如果不存在,执行报错

  • void deleteIfExists(Path path) : Path对应的文件/目录如果存在,执行删除

  • Path move(Path src, Path dest, CopyOption…how) : 将 src 移动到 dest 位置

  • long size(Path path) : 返回 path 指定文件的大小

Files常用方法:用于判断

  • boolean exists(Path path, LinkOption … opts) : 判断文件是否存在

  • boolean isDirectory(Path path, LinkOption … opts) : 判断是否是目录

  • boolean isRegularFile(Path path, LinkOption … opts) : 判断是否是文件

  • boolean isHidden(Path path) : 判断是否是隐藏文件

  • boolean isReadable(Path path) : 判断文件是否可读

  • boolean isWritable(Path path) : 判断文件是否可写

  • boolean notExists(Path path, LinkOption … opts) : 判断文件是否不存在

Files常用方法:用于操作内容

  • SeekableByteChannel newByteChannel(Path path, OpenOption…how) : 获取与指定文件的连接,how 指定打开方式。

  • DirectoryStreamnewDirectoryStream(Path path) : 打开 path 指定的目录

  • InputStream newInputStream(Path path, OpenOption…how):获取 InputStream 对象

  • OutputStream newOutputStream(Path path, OpenOption…how) : 获取 OutputStream 对象

测试:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.channels.SeekableByteChannel;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.nio.file.StandardOpenOption;
import java.util.Iterator;import org.junit.Test;/*** Files工具类的使用:操作文件或目录的工具类*/
public class FilesTest {@Testpublic void test1() throws IOException{Path path1 = Paths.get("d:\\nio", "hello.txt");Path path2 = Paths.get("atguigu.txt");//        Path copy(Path src, Path dest, CopyOption … how) : 文件的复制//要想复制成功,要求path1对应的物理上的文件存在。path1对应的文件没有要求。
//      Files.copy(path1, path2, StandardCopyOption.REPLACE_EXISTING);//        Path createDirectory(Path path, FileAttribute<?> … attr) : 创建一个目录//要想执行成功,要求path对应的物理上的文件目录不存在。一旦存在,抛出异常。Path path3 = Paths.get("d:\\nio\\nio1");
//      Files.createDirectory(path3);//     Path createFile(Path path, FileAttribute<?> … arr) : 创建一个文件//要想执行成功,要求path对应的物理上的文件不存在。一旦存在,抛出异常。Path path4 = Paths.get("d:\\nio\\hi.txt");
//      Files.createFile(path4);//      void delete(Path path) : 删除一个文件/目录,如果不存在,执行报错
//      Files.delete(path4);//      void deleteIfExists(Path path) : Path对应的文件/目录如果存在,执行删除.如果不存在,正常执行结束Files.deleteIfExists(path3);//     Path move(Path src, Path dest, CopyOption…how) : 将 src 移动到 dest 位置//要想执行成功,src对应的物理上的文件需要存在,dest对应的文件没有要求。
//      Files.move(path1, path2, StandardCopyOption.ATOMIC_MOVE);//     long size(Path path) : 返回 path 指定文件的大小long size = Files.size(path2);System.out.println(size);}@Testpublic void test2() throws IOException{Path path1 = Paths.get("d:\\nio", "hello.txt");Path path2 = Paths.get("atguigu.txt");
//      boolean exists(Path path, LinkOption … opts) : 判断文件是否存在System.out.println(Files.exists(path2, LinkOption.NOFOLLOW_LINKS));//        boolean isDirectory(Path path, LinkOption … opts) : 判断是否是目录//不要求此path对应的物理文件存在。System.out.println(Files.isDirectory(path1, LinkOption.NOFOLLOW_LINKS));//       boolean isRegularFile(Path path, LinkOption … opts) : 判断是否是文件//     boolean isHidden(Path path) : 判断是否是隐藏文件//要求此path对应的物理上的文件需要存在。才可判断是否隐藏。否则,抛异常。
//      System.out.println(Files.isHidden(path1));//        boolean isReadable(Path path) : 判断文件是否可读System.out.println(Files.isReadable(path1));
//      boolean isWritable(Path path) : 判断文件是否可写System.out.println(Files.isWritable(path1));
//      boolean notExists(Path path, LinkOption … opts) : 判断文件是否不存在System.out.println(Files.notExists(path1, LinkOption.NOFOLLOW_LINKS));}/*** StandardOpenOption.READ:表示对应的Channel是可读的。* StandardOpenOption.WRITE:表示对应的Channel是可写的。* StandardOpenOption.CREATE:如果要写出的文件不存在,则创建。如果存在,忽略* StandardOpenOption.CREATE_NEW:如果要写出的文件不存在,则创建。如果存在,抛异常*/@Testpublic void test3() throws IOException{Path path1 = Paths.get("d:\\nio", "hello.txt");//       InputStream newInputStream(Path path, OpenOption…how):获取 InputStream 对象InputStream inputStream = Files.newInputStream(path1, StandardOpenOption.READ);//       OutputStream newOutputStream(Path path, OpenOption…how) : 获取 OutputStream 对象OutputStream outputStream = Files.newOutputStream(path1, StandardOpenOption.WRITE,StandardOpenOption.CREATE);
//      SeekableByteChannel newByteChannel(Path path, OpenOption…how) : 获取与指定文件的连接,how 指定打开方式。SeekableByteChannel channel = Files.newByteChannel(path1, StandardOpenOption.READ,StandardOpenOption.WRITE,StandardOpenOption.CREATE);//      DirectoryStream<Path>  newDirectoryStream(Path path) : 打开 path 指定的目录Path path2 = Paths.get("e:\\teach");DirectoryStream<Path> directoryStream = Files.newDirectoryStream(path2);Iterator<Path> iterator = directoryStream.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}}
}

关于NIO.2中Path、Paths、Files类的使用就分享到这了。明天就十一啦,大家一起为祖国庆生哦。

上一篇:JavaIO流_中(IO原理、流的分类(节点流、缓冲流、转换流、输入输出流、对象流、打印流))

JavaIO流_下(NIO.2中Path、Paths、Files类的使用)相关推荐

  1. NIO.2中Path、 Paths、Files类的使用

    NIO.2中Path.Paths.Files类的使用 1.NIO概述 2.NIO. 2 3.Path 接口 4.Files 类 package com.atguigu.java;import org. ...

  2. nio 读取目录所有文件_在NIO.2中使用文件和目录

    nio 读取目录所有文件 在先前的文章中,我讨论了文件和目录的创建( 创建文件和目录 )以及选择( 列出和过滤目录内容 ). 采取的最后一个合乎逻辑的步骤是探索我们如何使用它们以及如何使用它们. 这是 ...

  3. javaio流_万字长文+思维导图帮你梳理 Java IO 流,还学不会你来打我(值得收藏)...

    前言 在上一篇的文章获取不错的浏览量后,继续加更的念头一直徘徊在心中,本来是想花段时间深入学习tomcat的,可是tomcat的源码中就有至关重要的NIO,于是得先整一下NIO,但是NIO的基础是BI ...

  4. vue 打开html流_在vue项目中添加一个html页面,开启本地服务器

    在vue项目里新增一个不需要登录的页面,那么我只能新增一个html页面了,不经过路由,直接在浏览器输入路径打开,那么就需要用到本地服务器, 1.vue里面的html页面最好放过在public文件夹里面 ...

  5. javaIO流详解--读取,写入文件的所有类与方法

    目录 IO流简介: 1 :InputStream 2:OutputStream 3:FileInputStream 4:FileOutputStream 5:利用FileInputStream和Fil ...

  6. java创建一个不可变对象_如何在Java中创建不可变类?

    java创建一个不可变对象 Today we will learn about the immutable class in Java. What are immutable classes? The ...

  7. python 概率分布函数_如何在Python中实现这五类强大的概率分布

    匿名用户 1级 2016-04-25 回答 首页 所有文章 观点与动态 基础知识 系列教程 实践项目 工具与框架应用 工具资源 伯乐在线 > Python - 伯乐在线 > 所有文章 &g ...

  8. javaio流_一文带你看懂JAVA IO流,史上最全面的IO教学啦

    一.IO流是什么 惯例引用百科的回答 流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数据的操 ...

  9. java 中的流_深入理解Java中的流(Stream)

    首先,流是什么? 流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以"流"的方式进行.设备可以是文件,网络,内存等. 流具有方向性,至于是输入 ...

最新文章

  1. catkin_make后输出:No module named ‘catkin_pkg‘
  2. python多态的概念_Python 多态
  3. Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#Object‘的解决方法...
  4. ccf-csp #201703-2 学生排队
  5. mysql十分钟分组_MYSQL每隔10分钟进行分组统计的实现方法
  6. 分享一份60页的《Python数据分析入门PPT》
  7. crontab清理日志
  8. mysql解压缩 1067_windows安装mysql8.0.0解压版附出现1067错误解决方法
  9. C++ override 关键字用法
  10. android 使用Binder通信
  11. linux 导出insert sql server,【IT爱好者】SQL Server自动生成INSERT语句(在SQL2005下测试通过)...
  12. Openstack之路(四)计算服务Nova
  13. 音视频基础概念与流程
  14. 收藏:常见物联网通信技术概览
  15. 用Java Swing山寨QQ空间的魔法卡片游戏
  16. 计算机专业答辩 ppt模板 免费,计算机毕业论文答辩(完整版).ppt
  17. SI24R2H_2.4GHz无线发射与125KHZ接收一体芯片
  18. 【计算机网络】实验一 Protocol Layer
  19. devise安装使用指南
  20. 转载:联想小新进入BIOS方法

热门文章

  1. 电机振动噪声分析电机多转速工况下的NVH分析,有模型文件,教学视频
  2. 快递小哥5年赚260万:哪有什么天生​牛逼,不过是笨笨地熬
  3. skynet集群学习
  4. 暗黑战神源码 客户端配置
  5. 用WPF轻松打造iTunes CoverFlow效果
  6. OpenCV检测眨眼
  7. 什么是ZBrush的动态网格体
  8. 转向系统常见故障诊断与排除
  9. python中if else语句用法_Python 条件语句(If ... Else)
  10. Mac Pro m1打出反引号