文件操作

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

- Files.list() 遍历文件和目录

  1. //List all files and sub-directories using Files.list()
  2. try {
  3. Files.list(Paths.get(".")).forEach(System.out::println);
  4. } catch (IOException e) {
  5. e.printStackTrace();
  6. }
  • Files.newDirectoryStream() 遍历文件和目录
  1. //List files and sub-directories with Files.newDirectoryStream()
  2. try {
  3. Files.newDirectoryStream(Paths.get(".")).forEach(System.out::println);
  4. } catch (IOException e) {
  5. e.printStackTrace();
  6. }
  • Files::isReularFile 找出目录中的文件
  1. //List only files inside directory using filter expression
  2. try {
  3. Files.list(Paths.get(".")).filter(Files::isRegularFile).forEach(System.out::println);
  4. } catch (IOException e) {
  5. e.printStackTrace();
  6. }
  • file->file.isHidden() 找出隐藏文件
  1. //Find all hidden files in directory
  2. final File[] files = new File(".").listFiles(file->file.isHidden());
  3. for(File file:files){
  4. System.out.println(file.getName());
  5. }
  • Files.newBufferedWriter 迅速创建一个BufferedWriter,可以使编码语法更简洁
  1. //Write to file using BufferedWriter
  2. Path path = Paths.get("D:\\test.txt");
  3. try(BufferedWriter writer = Files.newBufferedWriter(path)){
  4. writer.write("Hello World!");
  5. } catch (IOException e) {
  6. e.printStackTrace();
  7. }
  • Files.write() 使用简介的语法写入内容到文件
  1. //Write to file using Files.write()
  2. try {
  3. Files.write(Paths.get("D:\\test1.txt"),"Hello".getBytes());
  4. } catch (IOException e) {
  5. e.printStackTrace();
  6. }

Tips:

对于比较大文件夹,使用DirectoryStream 会性能更好


WatchService

利用WatchService 对文件目录进行监视,可以对目录中增删改查这些动作进行监控

  1. public class WatchServiceExample2 {
  2. public static void main(String[] args) throws IOException {
  3. Path curPath = Paths.get(".");
  4. WatchService watchService = curPath.getFileSystem().newWatchService();
  5. //遍历并注册目录
  6. walkAndRegisterDirectories(curPath, watchService);
  7. try {
  8. //监听目录变化
  9. while (true) {
  10. WatchKey watchKey = watchService.take();
  11. for (WatchEvent event : watchKey.pollEvents()) {
  12. System.out.println(event.kind());
  13. }
  14. }
  15. } catch (InterruptedException e) {
  16. e.printStackTrace();
  17. }
  18. }
  19. private static void walkAndRegisterDirectories(Path path, WatchService watchService) throws IOException {
  20. Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
  21. @Override
  22. public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
  23. registerDirectory(dir, watchService);
  24. return FileVisitResult.CONTINUE;
  25. }
  26. });
  27. }
  28. private static void registerDirectory(Path dir, WatchService watchService) throws IOException {
  29. WatchKey key = dir.register(watchService, StandardWatchEventKinds.ENTRY_CREATE
  30. , StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);
  31. }
  32. }

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. 日期格式化使用 YYYY-MM-dd 的潜在问题

    昨天在v站上看到这个关于YYYY-MM-dd的使用而出现Bug的帖子(v2ex.com/t/633650)非常有意思,所以拿过来分享一下. 在任何编程语言中,对于时间.数字等数据上,都存在很多类似这种 ...

  2. Spring 资源注入

    Spring开发中经常需要调用各种资源,包含普通文件.网址.配置文件.系统环境变量等,我们可以使用Spring表达式语言(Spring-EL)实现资源的注入. Spring主要使用@Value注解实现 ...

  3. JS进阶——this绑定了谁?

    一.this的意义 二.寻找this绑定对象 经常听到这么一句话,找this只需要看谁是调用方.当函数被调用时会记录函数调用调用方式.传参包括this等各种属性.有时候this绑定对象情况太抽象,找到 ...

  4. 「CodeForces 546B」Soldier and Badges 解题报告

    CF546B Soldier and Badges 题意翻译 给 n 个数,每次操作可以将一个数 +1,要使这 n 个数都不相同, 求最少要加多少? \(1 \le n \le 3000\) 感谢@凉 ...

  5. git简单使用指南

    git - 简易指南 这是一篇最适合初学者的教程,这里面没有高深的内容.学习git它可以帮助你管项目代码,提高团队开发效率.我使用的是win10系统,这里我会用它来给大家讲解. git - 安装 安装 ...

  6. 解决 Table ‘performance_schema.session_variables’ doesn’t exist 问题

    performance_schema在mysql5.5以上就有自带 performance_schema(安装数据库时自带的)如果装数据库或者使用数据时不小心删除了,就会出现Table‘perform ...

  7. vue resource 携带cookie请求 vue cookie 跨域

    vue resource 携带cookie请求 vue cookie 跨域 1.依赖VueResource 确保已安装vue-resource到项目中,找到当前项目,命令行输入: npm instal ...

  8. 150行代码打造.net core生产力工具,你值得拥有

    你是否在初学 .net core时,被依赖注入所折磨? 你是否在开发过程中,为了注入依赖而不停的在Startup中增加注入代码,而感到麻烦? 你是否考虑过或寻找过能轻松实现自动注入的组件? 如果有,那 ...

  9. jqGrid以setGridParam方式postData,包含历史数据的问题

    系统在使用jqGrid时,如果某些页面的查询项是复选框,后台是数组接收的,就会出现传值不正确问题. 1.项目中某查询页面存在的复选框:待处理S1,正在处理S2,已处理S3: 使用jqGrid提交查询数 ...

  10. 6.JavaSE之数据类型扩展及面试题讲解

    整数:二进制0b 十进制 八进制0 十六进制0x 浮点数:银行业务,关于钱的,Java有个BigDecimal数学工具类,用这个计算.最好完全避免使用浮点数进行比较.因为float 是有限的离散的,它 ...