FileSystemMap:与文件系统交互的自然方法

作为项目的一部分,我目前正在研究创建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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动画原理——绘制正弦函数环绕运动椭圆运动

书籍名称&#xff1a;HTML5-Animation-with-JavaScript 书籍源码&#xff1a;https://github.com/lamberta/html5-animation 1.正弦函数。x位置递增&#xff0c;y位置用sin生成。 这段代码是不需要ball.js的。 代码如下&#xff1a; <!doctype html> <html><hea…

oracle优质图书,经典Oracle图书推荐(之四)_oracle

经典的oracle图书:Oracle High Performance Tuning for 9i and 10g by Gavin PowellBook DescriptionThere are three parts to tuning an Oracle database: data modeling, SQL code tuning and physical database configuration.A data model contains tables and relationsh…

expr命令 linux,Shell expr命令进行整数计算的实现

expr 是 evaluate expressions 的缩写&#xff0c;译为“表达式求值”。Shell expr 是一个功能强大&#xff0c;并且比较复杂的命令&#xff0c;它除了可以实现整数计算&#xff0c;还可以结合一些选项对字符串进行处理&#xff0c;例如计算字符串长度、字符串比较、字符串匹配…

单身数字_完美单身

单身数字我不时遇到一些Java程序员&#xff0c;他们不确定他们应该如何正确实现Singleton模式。 &#xff08;如果您不知道什么是Singleton&#xff0c;请尝试Wikipedia&#xff1a; Singleton模式 &#xff09;。 我并不是在谈论在线程环境中的正确实现。 但是&#xff0c;使用…

linux下bios设置内存电压,系统安装的BIOS设置?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼要安装系统前&#xff0c; 要为旧系统做好备份工作&#xff0c;为新系统准备了所需的软件之后&#xff0c;接下来的工作就是安装Windows XP了。而安装系统要知道系统安装的BIOS设置&#xff0c; 如果您的硬盘采用了动态分区&#x…

DATEADD(Day, DATEDIFF(Day,0,ShippingTime), 0)

select DATEADD(Day, DATEDIFF(Day,0,GETDATE()), 0),DATEDIFF(Day,0,GETDATE()),GETDATE() 结果&#xff1a; (无列名) (无列名) (无列名)2015-01-30 00:00:00.000 42032 2015-01-30 20:04:57.050 转载于:https://www.cnblogs.com/Unrmk-LingXing/p/4263098.html

linux内存剩余量为什么这么少,为什么我的Linux系统中空闲内存如此之少?

"How come there is only so few free memory on my Linux PC?"Come to same question? No matter how much you put RAM in your motherboard, you quickly notice the free RAM is reduced so fast. Free RAM miscalculation? No!Before answering this, first …

java heroku_Heroku运行Java

java heroku如果您是像我这样的Java迷&#xff0c;那么您有个好消息值得振奋。 Heroku现在运行Java&#xff01; 嗯&#xff0c;与其他流行的“ Web”语言&#xff08;如PHP / RoR&#xff09;不同&#xff0c;Java具有在Web服务器中进行部署和维护的麻烦。 一直以来&#xff0…

Java集合框架练习-计算表达式的值

最近在看《算法》这本书&#xff0c;正好看到一个计算表达式的问题&#xff0c;于是就打算写一下&#xff0c;也正好熟悉一下Java集合框架的使用&#xff0c;大致测试了一下&#xff0c;没啥问题。 import java.util.*; /** * 用来计算表达式* for example: 12*3*(43*1)-3*123/…

关于Ecllipse

一、熟悉Eclipse 1.Eclipse是由IBM公司投资4000万美元开发的集成开发工具。它基于Java语言编写&#xff0c;并且是开放源代码的、可扩展的&#xff0c;也是目前最流行的Java集成开发工具之一。另外&#xff0c;IBM公司捐出Eclipse源代码&#xff0c;组建了Eclipse联盟&#xff…

怎么自学linux操作系统,linux操作系统好学吗_要学什么

描述linux操作系统的基础知识是比较好学的&#xff0c;但是需要我们通过大量地练习来牢记这些基础知识。Linux操作系统依靠其多用户和多任务、跨平台硬件支持、丰富的软件支持、可靠的安全性、良好的稳定性和完善的网络功能的优势吸引了众多用户&#xff0c;企业办公也逐渐使用…

JavaEE还是Spring? 都不行! 我们呼吁新的竞争者!

如果您一直在Twitter上关注一些Java的关键人物&#xff0c;或者在Reddit上阅读了“新闻”&#xff0c;那么您一定不会错过Spring和JavaEE宣传人员之间热闹的“贱人之战”&#xff08;请原谅我的法语&#xff09;。 首先&#xff0c;于尔根霍勒&#xff08;JrgenHller&#xff…

编程技术交流

需要技术交流包含java:HTML&#xff0c; MySQL&#xff0c; Redis&#xff0c; Linux &#xff0c;Nginx &#xff0c;Tomcat &#xff0c; IntelliJ IDEA &#xff0c;SVN &#xff0c; Eclipse &#xff0c;Maven &#xff0c; RationalRose&#xff0c; Java SE&#xff0c;…

Convert Sorted Array to Binary Search Tree

https://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 解题思路&#xff1a; 回忆一下BST二叉搜索树的定义&#xff0c;他是这样一个二叉树&am…

visa linux 串口 通信,使用visa进行串口通信

最近因为项目的原因&#xff0c;都在研究上位机通信问题。这两个星期研究还是蛮多心得&#xff0c;下面就写写关于使用visa进行串口通信的内容LABVIEW软件LabVIEW 在仪器控制方面&#xff0c;还是很有优势的&#xff0c;把你仪器给你&#xff0c;读懂指令&#xff0c;然后估计半…

使用Sublime text总是弹出Unable to save...

用户设置添加&#xff1a; "atomic_save": false

POJ 2398 Toy Storage

这道题和POJ 2318几乎是一样的。 区别就是输入中坐标不给排序了&#xff0c;_|| 输出变成了&#xff0c;有多少个区域中有t个点。 1 #include <cstdio>2 #include <cmath>3 #include <cstring>4 #include <algorithm>5 using namespace std;6 7 struct…

linux ip forward不起作用,linux-ipforward实现

对于linux的数据包流向&#xff0c;大家应该是比较了解&#xff0c;如果还不是很了解&#xff0c;可以参考《OReilly.Understanding.Linux.Network.Internals.Dec.2005》&#xff0c;其中有一个图非常清楚的描述了数据包的流向。ip的数据包接收函数是ip_rcv()>ip_rcv_finish…

java常见的面试题

1.什么是B/S架构?什么是C/S架构 B/S(Browser/Server),浏览器/服务器程序C/S(Client/Server),客户端/服务端,桌面应用程序2.你所知道网络协议有那些? HTTP:超文本传输协议 FTP:文件传输协议 SMPT:简单邮件协议 TELNET:远程终端协议 POP3:邮件读取协议 3.Java都有…

java实现原数组根据下标分隔成两个子数组并且在原数组中交换两个子数组的位置...

此类实现:输出一行数组数据&#xff0c;根据输入的下标&#xff0c;以下标位置为结束&#xff0c;将原数组分割成两组子数组。并交换两个子数组的位置&#xff0c;保持子数组中的元素序号不变.如:原数组为7,9,8,5,3,2 以下标3为分割点&#xff0c;分割为子数组一&#xff1a;7,…