Java8新特性一点通 | 回顾文件操作和watchService文件变更监视操作
文件操作
今天重温了一些文件操作:
- Files.list() 遍历文件和目录
//List all files and sub-directories using Files.list()
try {
Files.list(Paths.get(".")).forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
Files.newDirectoryStream()遍历文件和目录
//List files and sub-directories with Files.newDirectoryStream()
try {
Files.newDirectoryStream(Paths.get(".")).forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
Files::isReularFile找出目录中的文件
//List only files inside directory using filter expression
try {
Files.list(Paths.get(".")).filter(Files::isRegularFile).forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
file->file.isHidden()找出隐藏文件
//Find all hidden files in directory
final File[] files = new File(".").listFiles(file->file.isHidden());
for(File file:files){
System.out.println(file.getName());
}
Files.newBufferedWriter迅速创建一个BufferedWriter,可以使编码语法更简洁
//Write to file using BufferedWriter
Path path = Paths.get("D:\\test.txt");
try(BufferedWriter writer = Files.newBufferedWriter(path)){
writer.write("Hello World!");
} catch (IOException e) {
e.printStackTrace();
}
Files.write()使用简介的语法写入内容到文件
//Write to file using Files.write()
try {
Files.write(Paths.get("D:\\test1.txt"),"Hello".getBytes());
} catch (IOException e) {
e.printStackTrace();
}
Tips:
对于比较大文件夹,使用DirectoryStream会性能更好
WatchService
利用WatchService 对文件目录进行监视,可以对目录中增删改查这些动作进行监控
public class WatchServiceExample2 {
public static void main(String[] args) throws IOException {
Path curPath = Paths.get(".");
WatchService watchService = curPath.getFileSystem().newWatchService();
//遍历并注册目录
walkAndRegisterDirectories(curPath, watchService);
try {
//监听目录变化
while (true) {
WatchKey watchKey = watchService.take();
for (WatchEvent event : watchKey.pollEvents()) {
System.out.println(event.kind());
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private static void walkAndRegisterDirectories(Path path, WatchService watchService) throws IOException {
Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
registerDirectory(dir, watchService);
return FileVisitResult.CONTINUE;
}
});
}
private static void registerDirectory(Path dir, WatchService watchService) throws IOException {
WatchKey key = dir.register(watchService, StandardWatchEventKinds.ENTRY_CREATE
, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);
}
}
Java8新特性一点通 | 回顾文件操作和watchService文件变更监视操作的更多相关文章
- Java8新特性一点通 | 回顾功能接口Functional Interface
Functional Interface Functional Interface是什么? 功能接口是java 8中的新增功能,它们只允许一个抽象方法.这些接口也称为单抽象方法接口(SAM接口).这些 ...
- Java8新特性一点通 | 回顾字符转日期&JoinArray使用
StringToDate日期转换 Join Array使用 StringToDate日期转换 Convert string to date in ISO8601 format 利用LocalDate. ...
- java8新特性:对map集合排序
一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map,map是键值对的集合接口,它的实现类主要包括:HashMap, TreeMap, Hashtable以及LinkedHashMap等 ...
- Java8 新特性 Stream 非短路终端操作
非短路终端操作 Java8 新特性 Stream 练习实例 非短路终端操作,就是所有的元素都遍厉完,直到最后才结束.用来收集成自己想要的数据. 方法有: 遍厉 forEach 归约 reduce 最大 ...
- Java8 新特性 Stream 短路终端操作
短路终端操作 Java8 新特性 Stream 练习实例 传入一个谓词,返回传为boolean,如果符合条件,则直接结束流. 匹配所有 allMatch 任意匹配 anymMatch 不匹配 none ...
- Java8 新特性 Stream 无状态中间操作
无状态中间操作 Java8 新特性 Stream 练习实例 中间无状态操作,可以在单个对单个的数据进行处理.比如:filter(过滤)一个元素的时候,也可以判断,比如map(映射)... 过滤 fil ...
- Java8 新特性 Steam() 中间有状态操作
中间有状态操作 Java8 新特性 Stream 练习实例 中间操作,就是把数据处理成自己想要的类型,并且有状态操作,是在所有的数据基础上进行操作的.比如dictinct(去重),sorted(排 ...
- Java8 新特性之集合操作Stream
Java8 新特性之集合操作Stream Stream简介 Java 8引入了全新的Stream API.这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同 ...
- 【Java8新特性】Stream API有哪些中间操作?看完你也可以吊打面试官!!
写在前面 在上一篇<[Java8新特性]面试官问我:Java8中创建Stream流有哪几种方式?>中,一名读者去面试被面试官暴虐!归根结底,那哥儿们还是对Java8的新特性不是很了解呀!那 ...
随机推荐
- table 组件
table 组件了解一下? https://juejin.im/post/5da925bdf265da5b5d205b3f?utm_source=gold_browser_extension
- Pillow库来着
第一步肯定是安装啦 pip install pillow 如果安装报错,可以升级一下pip库,因为有可能是pip版本低了......... pip show pip 升级用 python -m pip ...
- Snipaste - 可以提高你工作效率的截图软件
使用Snipaste提高您的工作效率 Snipaste是一个简单但功能强大的剪切工具,还允许您将屏幕截图固定在屏幕上.下载并启动应用程序,按F1开始剪切,然后按F3将其粘贴为浮动窗口.而已! 您还可以 ...
- spring boot使用拦截器
1.编写一个拦截器 首先,我们先编写一个拦截器,和spring mvc方式一样.实现HandlerInterceptor类,代码如下 package com.example.demo.intercep ...
- 暑假提高组集训Day1 T1
说实话,今天的题真的有点难! ~备受打击~ 我们先来看一看第一题吧 看起来好像不太简单,其实并不难 下面来提供两种方法吧 1.做法一 //签到题 /* 那么这一题就是告诉你n个点的坐标,把它们分别放到 ...
- 完美解决win10系统无法安装.NET Framework问题
今天在安装willow插件的时候系统提示需要安装.NET Framework3.5的问题,当点击系统自动解决的时候,Windows系统又会提示错误,其实这也见怪不怪了,如果能自动解决的话也不会出现这种 ...
- fill 的用法
博客 : http://blog.csdn.net/liuchuo/article/details/52296646 fill函数的作用是:将一个区间的元素都赋予val值.函数参数:fill(vec. ...
- 【笔记】java并发编程实战
线程带来的问题:a)安全性问题b)活跃性问题c)性能问题 要编写线程安全的代码其核心在于要对状态访问操作进行管理,特别是对共享的和可变的状态的访问 Java中的主要同步机制是关键字synchroniz ...
- 2018徐州现场赛A
题目链接:http://codeforces.com/gym/102012/problem/A 题目给出的算法跑出的数据是真的水 #include<iostream> #include&l ...
- MongoDB数据库备份和恢复
1.数据库备份 mogodbdump -h dbhost -d dbname -o dbdirectory -h: 服务器地址,也可以指定端口号 -d: 需要备份的数据库的名称 -o: 备份的数据库存 ...