Java NIO

Java NIO概述

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

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

    --->java.nio.channels.Channel(通道)

    ​ --->FileChannel:处理本地文件

    ​ --->SocketChannel:TCP网络编程的客户端的Channel

    ​ --->ServerSocketChannel:TCP网络编程的服务器端Channel

    ​ --->DatagramChannel:UDP网络编程中发送端和接收端的Channel

NIO.2

  • 随着JDK 7 的发布,Java对NIO进行极大的扩展,增强了对文件处理和文件系统特性的支持,以至于我们称他们为NIO.2

    因为NIO提供的一些功能,NIO已经称为文件处理中越来越重要的部分。

NIO.2中Path,paths,Files类的使用
  • 早期的Java只提供一个file类来访问文件系统,但file类的功能比较有限,所提供的方法性能也不高。而且,大多数方法出错时仅返回失败,并不会提供异常信息。

  • NIO.2为了弥补这种不足,引入Path接口,代表一个平台无关的平台路径,描述了目录结构文件的位置。Path可以看成file类的升级版本,实际引用的资源也可以不存在。

  • 在以前IO操作都是这样写的:

    import java.io.File;
    File file = new File("index.html");
  • 但是在Java7中,我们可以这样写:

    import java.nio.file.Path;
    import java.nio.file.Paths;
    Path path = Paths("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(URL uri); //返回指定的uri对应的Path路径
Path接口
Path常用方法
String toString();	//返回调用Path对象的字符串表示形式
boolean startsWith(String path); //判断是否以path路径开始
boolean endsWith(Strng 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类对象
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指定打开方式。
    DirectoryStream<Path> new DirectoryStream(Path path); //打开path指定的目录
    InputStream newInputStream(Path path,OpenOption ... how); //获取InputStream对象
    OutputStream newOutputStream(Path path,OpenOption ... how); //获取OutputStream对象

NIO.2中Path,Paths,Files类的使用的更多相关文章

  1. NIO前奏之Path、Files、AsynchronousFileChannel

    NIO前奏之Path.Files.AsynchronousFileChannel   Java 1.4加入了nio包,Java 1.7 加入了真正的AIO(异步IO),AsynchronousFile ...

  2. JAVA基础知识之NIO.2——Path,Paths,Files

    NIO.2 JDK7对NIO进行了重大改进,主要包含以下两方面 新增Path接口,Paths工具类,Files工具类. 这些接口和工具类对NIO中的功能进行了高度封装,大大简化了文件系统的IO编程. ...

  3. JAVA NIO学习四:Path&Paths&Files 学习

    今天我们将学习NIO 的最后一章,前面大部分涉及IO 和 NIO 的知识都已经讲过了,那么本章将要讲解的是关于Path 以及Paths 和 Files 相关的知识点,以对前面知识点的补充,好了言归正传 ...

  4. Java NIO之拥抱Path和Files

    Java面试通关手册(Java学习指南)github地址(欢迎star和pull):https://github.com/Snailclimb/Java_Guide 历史回顾: Java NIO 概览 ...

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

  6. 详解 Paths类 与 Files类

    在本篇博文中,本人主要讲解NIO 的两个核心点 -- 缓冲区(Buffer) 和 通道 (Channel)之一的 缓冲区(Buffer), 有关NIO流的其他知识点请观看本人博文<详解 NIO流 ...

  7. JAVA nio 2 和 Path 类简介

    想要初步了解 NIO.2 API,也就是通常所说的“JSR203: More New I/O APIs for the Java Platform”,最好的切入点就是新的抽象类 java.nio.fi ...

  8. Java NIO学习(Path接口、Paths和Files工具类的使用)

    NIO学习:Paths和Files工具类的使用 JDK1.7引入了新的IO操作类.在java.nio.file包下,Java NIO Path接口和Files类. Path接口:Path表示的是一个目 ...

  9. Java NIO Path接口和Files类配合操作文件

    Java NIO Path接口和Files类配合操作文件 @author ixenos Path接口 1.Path表示的是一个目录名序列,其后还可以跟着一个文件名,路径中第一个部件是根部件时就是绝对路 ...

随机推荐

  1. MSF使用OpenSSL流量加密

    MSF使用OpenSSL流量加密 前言 之前在博客里使用了Openssl对流量进行加密,这次我们来复现暗月师傅红队指南中的一篇文章,尝试用OpenSSL对Metasploit的流量进行加密,以此来躲避 ...

  2. fiddler抓https包教程

    第一步: 安装fiddler 第二步: 下载fiddler证书生成器 第三步: 进入fiddler导出证书 第四步: 打开浏览器导入证书 第一步:安装fiddler  安装方法各位随意,但需保证是最新 ...

  3. rancher v1.6.29部署K8s

    1. 前提:上一文中,已部署好单节点Rancher v1.6.29 2. 在Rancher中,添加环境模板 修改k8s设置参数 参数修改明细: Private Registry for Add-Ons ...

  4. MyBatis学习01(初识MyBatis和CRUD操作实现)

    1.初识MyBatis 环境说明: jdk 8 + MySQL 5.7.19 maven-3.6.1 IDEA 学习前需要掌握: JDBC MySQL Java 基础 Maven Junit 什么是M ...

  5. 008 PCI设备BAR空间的初始化

    一.PCI设备BAR空间的初始化 在PCI Agent设备进行数据传送之前,系统软件需要初始化PCI Agent设备的BAR0~5寄存器和PCI桥的Base.Limit寄存器.系统软件使用DFS算法对 ...

  6. 004 PCI Express体系结构(四)

    一.PCI总线的中断机制 PCI总线使用INTA#.INTB#.INTC#和INTD#信号向处理器发出中断请求.这些中断请求信号为低电平有效,并与处理器的中断控制器连接.在PCI体系结构中,这些中断信 ...

  7. K8s 部署 Gitlab CI Runner

    K8s 版本:1.20.6 GitLab CI 最大的作用是管理各个项目的构建状态.因此,运行构建任务这种浪费资源的事情交给一个独立的 Gitlab Runner 来做就会好很多,而且 Gitlab ...

  8. BuildPack 打包

    无需 dockerfile,使用 buildpacks 打包镜像 书接上文,聪明如你已经发现项目中没有定义 dockerfile,但我们依然能打镜像,是如何做到的呢?正如上面提到的 gradle 的 ...

  9. uniapp封装小程序雷达图组件实现

    效果图: view <canvas id="radar-canvas" class="radar-canvas" type="2d"& ...

  10. RestTemplate post请求 Controller 接收不到值的解决方案 postForObject方法源码解析

    springboot 整合 RestTemplate 与 使用方法 RestTemplate 的 postForObject 方法有四个参数 String url => 顾名思义 这个参数是请求 ...