java.nio.file 表示non-blocking 非阻塞io(输入和输出)

一个 Path 对象表示一个文件或者目录的路径,是一个跨操作系统(OS)和文件系统的抽象

java.nio.file.Paths 类包含一个重载方法 static get(),该方法接受一系列 String 字符串或一个统一资源标识符(URI)作为参数,并且进行转换返回一个 Path 对象

文件操作的两个基本组件:

  1. 文件或者目录的路径;
  2. 文件本身。

文件和目录路径

path

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对象

常用方法:

Path    getFileName() 将此路径表示的文件或目录的名称返回为 Path对象
//Path toAbsolutePath()返回表示此路径的绝对路径的 Path对象 int getNameCount() 返回路径中的名称元素的数量。
使用endsWith是比较真个路径部分,但是不包含文件的后缀
getRoot()返回此路径的根组分作为 Path对象,或 null如果该路径不具有根组件
static Path    get(String first, String... more)
将路径字符串或连接到路径字符串的字符串序列转换为 Path 。
package fileall;

import java.nio.file.Path;
import java.nio.file.Paths; public class FileDemo1 {
public static void main(String[] args) {
// 查看系统的os类型
System.out.println(System.getProperty("os.name"));
//Path toAbsolutePath()返回表示此路径的绝对路径的 Path对象
Path p = Paths.get("FileDemo1.java").toAbsolutePath();
System.out.println(p);
/*
遍历Path对象的时候并不包含根路径,只有starsWith检测才会
int getNameCount() 返回路径中的名称元素的数量。
*/
System.out.println("###########################");
for (int i = 0;i <p.getNameCount();i++){
System.out.println(p.getName(i));
}
System.out.println("###########################");
/*
使用endsWith是比较真个路径部分,但是不包含文件的后缀
*/
System.out.println("ends with .java" + p.endsWith(".java"));
System.out.println("###########################");
for (Path pp:p){
System.out.print(pp+":");
System.out.print(p.startsWith(pp)+":");
System.out.println(p.endsWith(pp)+":"); }
/*
遍历Path对象的时候并不包含根路径,只有starsWith检测才会
getRoot()返回此路径的根组分作为 Path对象,或 null如果该路径不具有根组件
*/
System.out.println("start" + p.getRoot()+" " + p.startsWith(p.getRoot()));
}
}
/*
Windows 10
C:\Users\better.quan\Desktop\spring-boot-chapter\fivetwoseven\FileDemo1.java
###########################
Users
better.quan
Desktop
spring-boot-chapter
fivetwoseven
FileDemo1.java
###########################
ends with .javafalse
###########################
Users:false:false:
better.quan:false:false:
Desktop:false:false:
spring-boot-chapter:false:false:
fivetwoseven:false:false:
FileDemo1.java:false:true:
startC:\ true
*/

Files常用方法:

static boolean    exists(Path path, LinkOption... options)  测试文件是否存在
static boolean isDirectory(Path path, LinkOption... options) 测试文件是否是目录。
static boolean isExecutable(Path path) 测试文件是否可执行
static boolean isReadable(Path path) 测试文件是否可读。
static boolean isRegularFile(Path path, LinkOption... options) 测试文件是否是具有不透明内容的常规文件。 static boolean isWritable(Path path) 测试文件是否可写
static boolean notExists(Path path, LinkOption... options)测试此路径所在的文件是否不存在。
static FileStore getFileStore(Path path) 返回表示文件所在文件存储区的 FileStore
static FileTime getLastModifiedTime(Path path, LinkOption... options) 返回文件的上次修改时间。
static UserPrincipal getOwner(Path path, LinkOption... options) 返回文件的所有者。
static String probeContentType(Path path) 探测文件的内容类型。
public class FileDemo1 {
public static void main(String[] args) throws IOException {
System.out.println(System.getProperty("os.name"));
Path p = Paths.get("src/FileDemo1.java").toAbsolutePath();
System.out.println(p);
System.out.println(Files.exists(p));
System.out.println(Files.isDirectory(p));
System.out.println(Files.isExecutable(p));
System.out.println(Files.isReadable(p));
System.out.println(Files.isRegularFile(p));
System.out.println(Files.isWritable(p));
System.out.println(Files.notExists(p));
System.out.println(Files.isHidden(p));
System.out.println(Files.size(p));
System.out.println(Files.getFileStore(p));
System.out.println(Files.getLastModifiedTime(p));
System.out.println(Files.getOwner(p));
System.out.println(Files.probeContentType(p));
}
}
/*
Windows 10
C:\Users\better.quan\Desktop\spring-boot-chapter\fivetwoseven\src\FileDemo1.java
true
false
true
true
true
true
false
false
1118
Windows (C:)
2020-06-01T02:09:12.383984Z
BUILTIN\Administrators (Alias)
null
*/

Paths的增减修改

Path relativize(Path other)

构造此路径和给定路径之间的相对路径。
public class DEmo11 {
public static void main(String[] args) {
System.out.println(System.getProperty("os.name"));
Path p = Paths.get("src/FileDemo1.java").toAbsolutePath();
System.out.println(p);
Path b = Paths.get("fivewoseven").toAbsolutePath();
System.out.println(b);
Path c =p.relativize(b);
System.out.println(c);
}
}
/*
Windows 10
C:\Users\better.quan\Desktop\spring-boot-chapter\fivetwoseven\src\FileDemo1.java
C:\Users\better.quan\Desktop\spring-boot-chapter\fivetwoseven\fivewoseven
..\..\fivewoseven
*/
Path resolve(Path other)

根据这条路径解决给定的路径。
/*
等于在路径后面加上
*/ public class DEmo11 {
public static void main(String[] args) {
System.out.println(System.getProperty("os.name"));
Path p = Paths.get("FileDemo1.java");
System.out.println(p);
Path b = Paths.get("fivewoseven").toAbsolutePath();
System.out.println(b);
Path c =b.resolve(p);
System.out.println(c);
}
}
/*
Windows 10
FileDemo1.java
C:\Users\better.quan\Desktop\spring-boot-chapter\fivetwoseven\fivewoseven
C:\Users\better.quan\Desktop\spring-boot-chapter\fivetwoseven\fivewoseven\FileDemo1.java
*/
static Path    createFile(Path path, FileAttribute<?>... attrs)创建一个新的和空的文件,如果该文件已存在失败。 产生异常:java.nio.file.FileAlreadyExistsException
static Path createDirectories(Path dir, FileAttribute<?>... attrs) 首先创建所有不存在的父目录来创建目录。
static Path createDirectory(Path dir, FileAttribute<?>... attrs)创建一个新的目录。
public class DEmo11 {
public static void main(String[] args) throws IOException {
System.out.println(System.getProperty("os.name"));
Path p = Paths.get("quan.java");
System.out.println(p);
// Files.createFile(p);//创建新的文件,按照path,默认是项目路径下
Path dir_P = Paths.get("AAA");
Path dir_PM = Paths.get("CCC/BBB");
// 创建新目录,一级,默认是项目目录
Files.createDirectory(dir_P);
// 创建多级目录,默认是项目目录
Files.createDirectories(dir_PM);
}
}
static Path createTempFile(Path dir, String prefix, String suffix, FileAttribute<?>... attrs)

在指定的目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称

static Path createTempDirectory(String prefix, FileAttribute<?>... attrs)

在默认临时文件目录中创建一个新目录,使用给定的前缀生成其名称

临时木只有前缀没有后缀

文件系统:

abstract Iterable<FileStore> getFileStores()

返回一个对象,以遍历底层文件存储。
abstract Iterable<Path> getRootDirectories()

返回一个对象来遍历根目录的路径
abstract String getSeparator()

返回名称分隔符,表示为字符串。
abstract boolean isOpen()

告诉这个文件系统是否打开。
abstract boolean isReadOnly()

告诉这个文件系统是否只允许只读访问其文件存储。
abstract FileSystemProvider provider()

返回创建此文件系统的提供程序。
abstract Set<String> supportedFileAttributeViews()

返回 FileSystem支持的文件属性视图的一组 FileSystem 。
public class DEmo11 {
public static void main(String[] args) throws IOException {
FileSystem fs = FileSystems.getDefault();
System.out.println(fs);
Path p = Paths.get("stc/DEmo11.java").toAbsolutePath();
System.out.println(p);
System.out.println(fs.getFileStores());
System.out.println(fs.getRootDirectories());
System.out.println(fs.getSeparator());
System.out.println(fs.isOpen());
System.out.println(fs.isReadOnly());
System.out.println(fs.provider());
System.out.println(fs.supportedFileAttributeViews());
}
}
/*
sun.nio.fs.WindowsFileSystem@4554617c
C:\Users\better.quan\Desktop\spring-boot-chapter\fivetwoseven\stc\DEmo11.java
sun.nio.fs.WindowsFileSystem$1@74a14482
[C:\, D:\, E:\]
\
true
false
sun.nio.fs.WindowsFileSystemProvider@1540e19d
[owner, dos, acl, basic, user]
*/

WatchService

注意:只会监视给定的目录,而不是下面的所有内容。如果需要监视整个树目录,必须在整个树的每个子目录上放置一个 Watchservice。

1从 FileSystem 中得到了 WatchService 对象

2注册到路径以及我们感兴趣的项目的变量参数列表中

变量参数列表如下;

文件读写

/*
java.nio.file.Files 类中的实用程序将帮助你轻松读写文本和二进制文件。java.nio.file.Files
类中的实用程序将帮助你轻松读写文本和二进制文件。 */
public class FileWR {
public static void main(String[] args) throws IOException {
// Paths.get 获取Path对象
//使用readAllLines返回的是字符串集合
List<String> lineList =Files.readAllLines(Paths.get("C:\\Users\\better.quan\\Desktop\\spring-boot-chapter\\fivetwoseven\\src\\filetest"));
System.out.println(lineList);
lineList.stream()//转换为输入流
.filter(line -> !line.startsWith("//"))//过滤注释
.map(line -> line.substring(0,line.length()/2))//截取每行的长度的一班
.forEach(System.out::println);
//跳过注释行,其余的内容每行只打印一半
for (String line:lineList
) {
line.startsWith("//");
}
}
}

[one, two, three, //four, five, six, seven, eight, nine, ten]
o
t
th
fi
s
se
ei
ni
t

------------恢复内容结束------------

------------恢复内容结束------------

java-与文件相关的更多相关文章

  1. 文件相关操作工具类——FileUtils.java

    文件相关操作的工具类,创建文件.删除文件.删除目录.复制.移动文件.获取文件路径.获取目录下文件个数等,满足大多数系统需求. 源码如下:(点击下载 FileUtils.java) import jav ...

  2. 文件IO 相关的包:java.io文件——API

    文件IO 相关的包:java.io文件——API 1.Java.io.File类的使用(1)两种路径绝对路径:相对于当前路径:当前为 “工程名”(2)File类创建,对象为一个文件/目录,可能存在或不 ...

  3. java复制文件的4种方式

    尽管Java提供了一个可以处理文件的IO操作类.但是没有一个复制文件的方法.复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候.然而有几种方法可以进行Java文件复制操作,下面列举出4中最 ...

  4. java实现文件批量导入导出实例(兼容xls,xlsx)

    1.介绍 java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下. 目前我所接触过的导入导出技术主要有POI和iRepo ...

  5. 【Socket编程】Java中网络相关API的应用

    Java中网络相关API的应用 一.InetAddress类 InetAddress类用于标识网络上的硬件资源,表示互联网协议(IP)地址. InetAddress类没有构造方法,所以不能直接new出 ...

  6. maven工程 java 实现文件上传 SSM ajax异步请求上传

    java ssm框架实现文件上传 实现:单文件上传.多文件上传(单选和多选),并且用 ajax 异步刷新,在当前界面显示上传的文件 首先springmvc的配置文件要配置上传文件解析器: <!- ...

  7. java 获取文件后缀名(文件类型)

      java 获取文件后缀名(文件类型) CreateTime--2018年5月23日09:16:31 Author:Marydon // 获取文件名的后缀名(文件类型) String oldFile ...

  8. [JAVA]java复制文件的4种方式

    尽管Java提供了一个可以处理文件的IO操作类. 但是没有一个复制文件的方法. 复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候. 然而有几种方法可以进行Java文件复制操作,下面列举出 ...

  9. java的文件操作类File

    java.io.File类,是java获取文件/文件夹的所有属性,和完成所有相关操作的类 例子: package test.file.IO; import java.io.*; public clas ...

  10. 沉淀再出发:java的文件读写

    沉淀再出发:java的文件读写 一.前言 对于java的文件读写是我们必须使用的一项基本技能,因此了解其中的原理,字节流和字符流的本质有着重要的意义. 二.java中的I/O操作 2.1.文件读写的本 ...

随机推荐

  1. Windows server 2012安装vm-tools遇到的问题

    Windows server 2012安装VM tools异常解决办法 在VMWare虚拟机上安装Windows Server 2012之 后安装VMWare Tools时报如下错误信息: 问题:缺少 ...

  2. windev中编辑表单确认按钮的code规范建议

    编辑表单的确认操作,是一个常规操作,根据过往经验,建议按以下规范代码来撸.案例如下所示(主子表保存): //填报规范:必填项目 IF COMBO_招聘职位 = "" OR COMB ...

  3. 为什么用Python,高级的Python是一种高级编程语言

    Python特性 如果有人问我Python最大的特点是什么,我会毫不犹豫地告诉他:它简单易学,功能强大.作为一个纯自由软件,Python有许多优点: 很简单.基于"优雅".&quo ...

  4. 苹果如何控制android手机,安卓手机怎么控制苹果?

    小编经常通过手机远程控制别人手机,帮助他人解决一些电脑问题,另外还经常需要通过远程电脑控制服务器,管理脚本之家的服务器等等,可能这些对大家都没有什么诱惑,今天笔者为大家带来一个非常有趣的手机控制电脑的 ...

  5. ansible复习笔记_role-从零到无

    --创建时间:2021年3月9日 --修改时间:2021年3月9日 --作者:飞翔的小胖猪 roles是各个单独功能性模块的集合,通过分别将变量.文件.任务.模板及处理器放置于单独的目录中,并可以便捷 ...

  6. jprofiler 查看程序内存泄露

    在最近的工作中,通过JProfiler解决了一个内存泄漏的问题,现将检测的步骤和一些分析记录下来,已备今后遇到相似问题时可以作为参考. 运行环境: Tomcat6,jdk6,JProfiler8 内存 ...

  7. 微信小程序如何测试?

    不需要安装,只要在微信里找到这个小程序打开即可使用,由于小程序的便捷,如今越来越多的平台开发方都纷纷推出自身的小程序应用. 那我们该如何进行微信小程序测试呢? 1.功能测试 功能测试以需求文档和交互视 ...

  8. zookeeper的JAVA API使用

    1.创建连接 2.创建节点 3.监听信息 Watcher.class 4.获取节点 Stat stat = new Stat(); zk.getData(Path,true,stat); 5.修改节点 ...

  9. unittest的discover方法批量执行02

    前言 我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到unittet里面的discover方法来加载用例了. 加载用例后,用unittest里面的Text ...

  10. Python安装包报错:PackagesNotFoundError: The following packages are not available from current channels

    以安装SimpleITK包为例,安装时,显示下图错误 conda install SimpleITK 按以下操作完成包安装 anaconda search -t conda SimpleITK #查询 ...