文件操作

今天重温了一些文件操作:

- 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文件变更监视操作的更多相关文章

  1. Java8新特性一点通 | 回顾功能接口Functional Interface

    Functional Interface Functional Interface是什么? 功能接口是java 8中的新增功能,它们只允许一个抽象方法.这些接口也称为单抽象方法接口(SAM接口).这些 ...

  2. Java8新特性一点通 | 回顾字符转日期&JoinArray使用

    StringToDate日期转换 Join Array使用 StringToDate日期转换 Convert string to date in ISO8601 format 利用LocalDate. ...

  3. java8新特性:对map集合排序

    一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map,map是键值对的集合接口,它的实现类主要包括:HashMap, TreeMap, Hashtable以及LinkedHashMap等 ...

  4. Java8 新特性 Stream 非短路终端操作

    非短路终端操作 Java8 新特性 Stream 练习实例 非短路终端操作,就是所有的元素都遍厉完,直到最后才结束.用来收集成自己想要的数据. 方法有: 遍厉 forEach 归约 reduce 最大 ...

  5. Java8 新特性 Stream 短路终端操作

    短路终端操作 Java8 新特性 Stream 练习实例 传入一个谓词,返回传为boolean,如果符合条件,则直接结束流. 匹配所有 allMatch 任意匹配 anymMatch 不匹配 none ...

  6. Java8 新特性 Stream 无状态中间操作

    无状态中间操作 Java8 新特性 Stream 练习实例 中间无状态操作,可以在单个对单个的数据进行处理.比如:filter(过滤)一个元素的时候,也可以判断,比如map(映射)... 过滤 fil ...

  7. Java8 新特性 Steam() 中间有状态操作

    中间有状态操作 Java8 新特性 Stream 练习实例   中间操作,就是把数据处理成自己想要的类型,并且有状态操作,是在所有的数据基础上进行操作的.比如dictinct(去重),sorted(排 ...

  8. Java8 新特性之集合操作Stream

    Java8 新特性之集合操作Stream Stream简介 Java 8引入了全新的Stream API.这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同 ...

  9. 【Java8新特性】Stream API有哪些中间操作?看完你也可以吊打面试官!!

    写在前面 在上一篇<[Java8新特性]面试官问我:Java8中创建Stream流有哪几种方式?>中,一名读者去面试被面试官暴虐!归根结底,那哥儿们还是对Java8的新特性不是很了解呀!那 ...

随机推荐

  1. mysql主从之主机名导致主从机制失败的问题

    一 主库 mysql主服务器的正确配置需要指定log-bin.log-bin-index server-id = 1 log-bin=master-bin log-bin-index = master ...

  2. 【阿里云IoT+YF3300】10.快速开发188协议设备驱动

    188协议的全称为CJ-T188-2004 <户用计量仪表数据传输技术条件>,是针对水表.燃气表.热量表和其他集中采集的一个国家行业标准协议. YFIOs就是YFSoft I/O Serv ...

  3. $NOIp$做题记录

    虽然去年做了挺多了也写了篇一句话题解了但一年过去也忘得差不多了$kk$ 所以重新来整理下$kk$ $2018(4/6$ [X]积木大赛 大概讲下$O(n)$的数学方法. 我是从分治类比来的$QwQ$. ...

  4. 洛谷$P$3293 美味 $[SCOI2016]$ 主席树

    正解:主席树 解题报告: 传送门! 挺有趣的,至少我不会$QAQ$(虽然我不会的多了去了$QAQ$ 如果没有这个所谓美味度限制可以直接线段树水过去嘛$QwQ$ 然后现在问的是个异或运算后的结果,关于异 ...

  5. SpringBoot基础架构篇1(SpringBoot、MyBatis-Plus与Thymeleaf)

    show me the code and talk to me,做的出来更要说的明白 我是布尔bl,你的支持是我分享的动力! 1 引入 使用 MyBatis-Plus 以及 thymeleaf 实现增 ...

  6. webpack4的配置你都掌握了么?

    webpack5都出了,webpack4的的基本配置,解析ES6,引入CSS,编译Less,设置image等等,你都会了么? ​解析ES6 了解Babel Babel是一个JavaScript编译器, ...

  7. CF1200D White Lines | 前缀和

    传送门 Examples input 1 4 2 BWWW WBBW WBBW WWWB output 1 4 input 2 3 1 BWB WWB BWB output 2 2 input 3 5 ...

  8. MySQL快速回顾:高级查询操作

    8.1 排序数据 检索出的数据并不是以纯粹的随机顺序显示的.如果不排序,数据一般将以它在底层表中出现的顺序显示.这可以是数据最初添加到表中的顺序.但是,如果数据后来进行过更新或删除,则此顺序将会受到M ...

  9. Tarjan强连通分量模板

    最好还是看一看下面这个网址吧 我的这篇博客里的代码更加缜密(毫无错误的神级代码)https://www.cnblogs.com/Tidoblogs/p/11315153.html https://ww ...

  10. Java 遍历集合时产生的ConcurrentModificationException异常

    前几天做Java实验的时候,打算用foreach遍历一个ArrayList集合,并且当集合中的某个元素符合某个值时删除这个元素.写完运行时抛出了ConcurrentModificationExcept ...