作为项目的一部分,我目前正在研究创建FileSystemMap 。 我已经开始了一个非常小的GitHub的项目在这里举办的代码。

本质上,此映射实现将允许用户与其文件系统上的目录进行交互,就好像它是java.util.Map 。 映射中的每个条目将是该目录中的文件,键将是文件名,值将是文件的内容。

此代码构建一个FileServiceMap并添加五个条目:

Map map = new FileSystemMap("/tmp/filetests");map.put("one", "one");map.put("two", "two");map.put("three", "three");map.put("four", "four");map.put("five", "five");

这将导致直接的结构如下:

/tmp/filetests/|----- five|----- four|----- one|----- three|----- two

添加和删​​除条目将更改目录中的文件。 更改条目的值将导致使用新值作为内容重写文件。 有关更多示例,请参见testMapMethods中的代码。

此外, FileSystemMap已设计用于双向交互。 对其进行的任何程序性更新都将反映在文件系统上,并且对文件系统的任何更新将由地图拾取并作为事件触发。

此代码将更改注册到文件系统并打印出来:

Map map = new FileSystemMap("/tmp/filetests");
map.registerForEvents(System.out::println);

这是一些示例输出:

FPMEvent{eventType=NEW, programmatic=true, key='one', value='one'}

eventType是以下之一:

  • 新–文件已创建
  • 更新–文件已被修改
  • 删除–文件已被删除

编程标志指示是否触发事件的是FileSystemMap本身。 例如,如果调用了put() ,将创建一个文件,该文件又将引发一个事件。 为了避免反馈,了解它是否是触发事件的FileSystemMap上的操作可能很有用。

密钥是已更改文件的名称。

是与已更改文件关联的最新值。 注意:这可能是也可能不是实际触发更改的值 。 例如,如果条目有两个非常快速的更改,则在第二次更新已经发生之后,第一个事件的值完全有可能会获得该值。 例如

map.put("one", "1");map.put("one", "2");

可能产生以下输出:

FPMEvent{eventType=NEW, programmatic=true, key='one', value='2'}

拾取了第一个事件(通过将“ one”设置为“ 1”触发),但是在程序检查文件内容时,文件已更改为“ 2”。 然后拾取第二个事件(通过将“ 1”设置为“ 2”来触发),但是由于该值未更改,因此将其抑制。

一些注意事项:

  1. 以“。”开头的文件。 被忽略。 原因是许多编辑器(包括vi)创建的临时文件不应由FileServiceMap拾取。
  2. 如果查看代码,您会注意到WatchService(自Java7开始)用于监视对文件系统的更改。 重要的是要了解WatchService是特定于操作系统的。 特别是在Mac OSX上,它不能很好地工作。 该主题讨论了一些问题。 WatchService的更新速度很慢,可以丢弃快速流动的事件。 在我的测试中,Ubuntu的性能明显优于MacOSX。 但是,如果您主要对手动执行的文件系统更改感兴趣,那么Mac OSX也可以。
  3. 映射仅支持字符串。

不用说,此类是为特定的实用程序而不是任何性能而设计的。

欢迎对该项目的所有贡献!

翻译自: https://www.javacodegeeks.com/2015/04/filesystemmap-a-natural-way-to-interact-with-your-file-system.html

FileSystemMap:与文件系统交互的自然方法相关推荐

  1. php 系统交互 删除文件_FileSystemMap:与文件系统交互的自然方法

    php 系统交互 删除文件 作为项目的一部分,我目前正在研究创建FileSystemMap . 我已经开始了一个非常小的GitHub的项目在这里举办的代码. 本质上,此映射实现将允许用户与其文件系统上 ...

  2. 基础必备 | Python处理文件系统的10种方法

    作者 | Jeff Hale 译者 | 风车云马:责编 | Jane,Rachel 出品 | Python大本营(ID:pythonnews) [导读]在编写一些Python程序的时候,我们常常需要与 ...

  3. python os 遍历 子目录中所有文件_Python处理文件系统的10种方法 !

    通过一个能够实现与文件系统进行交互的Python程序,我们可以实现很多有趣的应用,但是大部分人并不知道如何实现这种交互.本文为相关研发人员和数据科学家提供了一个实现指南,并重点介绍10个基本的os和s ...

  4. 每日一课 | Python处理文件系统的10种方法

    作者 | Jeff Hale 译者 | 风车云马 责编 | Jane,Rachel 出品 | Python大本营(ID:pythonnews) 今日知识点 如何运用Python处理文件系统 前言 在编 ...

  5. python调用远程js_python和js交互调用的方法

    后台代码都是利用的1.[get方式]使用jquery的get json与后台交互前端js代码片段var data= {'a': $('input[name="a"]').val() ...

  6. python中和js交互_python和js交互调用的方法

    后台代码都是利用的 1.[get方式]使用jquery的get json与后台交互 前端js代码片段 var data= { 'a': $('input[name="a"]').v ...

  7. 转”使用UBOOT烧写根文件系统和内核的方法

    "转"使用UBOOT烧写根文件系统和内核的方法 2012-08-13 20:39:28 分类: 原文地址:"转"使用UBOOT烧写根文件系统和内核的方法 作者: ...

  8. python交互编程模式_进入python交互模式的方法

    进入python交互模式的方法 发布时间:2020-08-01 09:57:35 来源:亿速云 阅读:63 作者:清晨 这篇文章主要介绍进入python交互模式的方法,文中介绍的非常详细,具有一定的参 ...

  9. linux 目录防篡改,一种基于Linux虚拟文件系统的防篡改方法及系统的制作方法

    一种基于Linux虚拟文件系统的防篡改方法及系统的制作方法 [技术领域] [0001]本发明涉及文件防护技术领域,特别涉及一种基于Linux虚拟文件系统的防篡改方法及系统. [背景技术] [0002] ...

最新文章

  1. GitLab CI流水线配置文件.gitlab-ci.yml详解(三)
  2. python和idl_有前辈对比过IDL和Python的速度吗,哪个会快点?
  3. 【OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )
  4. cf1051F. The Shortest Statement(最短路)
  5. 【译】CREDITS: Peer-to-peer (P2P) network and its components
  6. Flex itemRenderer 内联渲染器
  7. 快速了解AngularJs HTTP响应拦截器
  8. 2-3实战分类模型之数据的读取与展示
  9. python查找指定字符所在行号_在python中获取当前位置所在的行号和函数名
  10. 内推熟人来自己公司一定要慎重
  11. matlab单层感知器画线,MATLAB神经网络学习(1):单层感知器
  12. 指示灯亮着,但是右边的数字小键盘不可用
  13. 猪懂傻改之《powershell 代码规范》
  14. python行业中性_Python抓取分析淘宝连衣裙数据,128元真的是低价人群分界线吗?...
  15. 简单的使用一下增强for循环
  16. 【C语言】动态申请空间
  17. 在linux下解压rar文件
  18. 北邮计算机学院国家示范,北京邮电大学获批2020年国家自然科学基金81项
  19. 《2021大数据产业年度创新服务产品》榜重磅发布丨金猿奖
  20. 51nod-1631-小鲨鱼在51nod小学

热门文章

  1. CSS动画示例(上一篇是CSS过渡…)
  2. Python变量名的定义规则与定义方式
  3. 基于持久化的wordcount程序 foreachRDD
  4. 龙芯linux内核,龙芯的linux kernel,内核开发与编译
  5. 键盘录入一个正整数,把它的各个位上的数字倒着排列形成一个新的整数并输出。 例如:12345 数出54321 78760 输出6787(0省去)
  6. redis集群搭建报错-(error) CLUSTERDOWN The cluster is down
  7. 基础笔试编程题(jz)
  8. 关于Object.clone克隆方法的测试
  9. tf.metrics._将指标标签与MicroProfile Metrics 2.0一起使用
  10. maven依赖范围_Maven依赖范围