前言

众所周知,小而美软件每次更新都不干人事啊。上次忘了哪个版本更新的,接收到的文件一律是只读文件,虽然只需要右键属性把只读勾选去掉就行,但是每次接收了个文件都要这么做属实是有点麻烦。所以就自己写了个小工具,让工具帮我们做这件事。

实时监听文件夹变化,我们用 WatchService 实现,而且由于它是异步的,不会有什么性能负担,所以对于性能这一点是不用担心的。

实现

首先我们需要在项目的根目录下,建个 微信文件夹路径.txt 文件,在这里设置自己的微信文件目录(因为每个人的目录都不一样,我后续需要打包成exe程序,所以这个目录不能写死。)

设置好后,我们就可以开始写代码了。

代码

import java.io.*;
import java.nio.file.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;/*** 监听并清除文件的只读属性*/
public class RemoveReadOnly {/** 微信文件夹路径 */private static String folderPath = "";/*** 获取当前年月(yyyy-MM)* 因为微信文件目录是按年月创建的,所以设置目录时只需要设置到 FileStorage ——》》File 文件夹即可。* 每个月接收的文件,我们只监听当前月所在的文件夹。*/private static String currenMonth(){SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM");return sfd.format(new Date());}/*** 读取设置的路径*/private static void readPath() throws IOException {String path = System.getProperty("user.dir");//打包用的路径:jar包或exe程序所在目录名InputStreamReader fReader = new InputStreamReader(new FileInputStream(path+"/微信文件夹路径.txt"),"UTF-8");BufferedReader reader = new BufferedReader(fReader);String lineTxt=null;while((lineTxt=reader.readLine())!=null){if (lineTxt.length()>0){folderPath = lineTxt + currenMonth();break;}}}/*** 监听文件夹,并去掉文件的只读属性*/public static void removeReadOnly() throws IOException{File f = new File(folderPath);if (!f.exists()) {Log.msg("路径不存在,请检查 微信文件夹路径.txt 文件是否设置了路径,或设置的路径是否正确!");}// 获取文件系统的WatchService对象WatchService watchService = FileSystems.getDefault().newWatchService();// 注册监听事件Path dir = Paths.get(folderPath);dir.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.OVERFLOW);while (true) { // 循环监听WatchKey key = null;try {key = watchService.take();} catch (InterruptedException e) {return;}for (WatchEvent<?> event : key.pollEvents()) {WatchEvent.Kind<?> kind = event.kind();if (kind == StandardWatchEventKinds.OVERFLOW) continue;WatchEvent<Path> ev = (WatchEvent<Path>) event;Path filename = ev.context();File file = dir.resolve(filename).toFile();if (file.exists() && !file.canWrite()) { // 判断文件是否可以写入file.setWritable(true); // 将文件的只读属性去掉Log.msg("将文件 "+filename.toString()+" 的只读属性去掉了!");}}boolean valid = key.reset();if (!valid) {break;}}}public static void main(String[] args) {try {readPath();removeReadOnly();}catch (Exception e){e.printStackTrace();}}
}

输出日志(因为打包成exe用到的软件exe4j,有项设置是可以自动把我们的日志输出到文件的,这里我们就不用单独再用FileHandler设置输出到文件了)

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.*;public class Log {private static final Logger logger = Logger.getLogger("MyLogger");private static final SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");/*** 格式化时间,用于输出日志*/private static String currentTime(){return sfd.format(new Date());}/*** 设置消息*/public static void msg(String msg){logger.info(currentTime()+" "+msg);}
}

以上就是全部代码了,是不是很简单!

最后的结构是这样的

测试了可以用,包括大文件也没问题可以监听到。

源码和打包后程序放在这里了

download 或者是 Gitee

Java实时监听文件夹,实现实时监听微信接收的文件,去掉文件的只读属性相关推荐

  1. Python的看门狗实现自动化实时对服务器、Windows或Linux文件夹的实时监控

    众所周知,在运维过程中,实时获取目标文件夹至关重要,Python的watchdog是用程序来监视文件系统事件Python库,所以用该库可以实现对文件夹的实时监控,filenotify.py代码如下: ...

  2. java获得src文件夹下的图片和 获得resource目录下的文件

    java获得src文件夹下的图片和 获得resource目录下的文件 1 获得src文件夹下的图片 文件位置 获得url代码 URL url= getClass().getClassLoader(). ...

  3. python遍历目录压缩文件夹然后在发送邮件_python目录操作之python遍历文件夹后将结果存储为xml...

    Linux服务器有CentOS.Fedora等,都预先安装了Python,版本从2.4到2.5不等,而Windows类型的服务器也多数安装了Python,因此只要在本机写好一个脚本,上传到对应机器,在 ...

  4. Python 连接FTP服务器并实现文件夹下载实例演示,python区分ftp目录下文件和文件夹方法,ftp目录下包含中文名问题处理

    Python 连接 FTP 服务器并实现文件夹下载实例演示 第一章:连接 FTP 服务器并实现文件夹下载 ① 连接 FTP 服务器 ② 进入指定目录并显示文件信息 ③ 区分文件和文件夹名 ④ 文件夹名 ...

  5. 怎样清除手机中的html文件夹,怎么彻底清除手机APP卸载后的残留文件夹 能删与不能删文件名...

    ­ 手机里的文件和手机下载了app之后,即使卸载,也很容易有垃圾残留,而且占用的空间还挺多,但是根本不知道哪些是垃圾,要怎么清除这些垃圾? ­ 一般清理垃圾软件,如360,腾讯管家等可以清除手机缓存, ...

  6. android系统密码文件夹,安卓手机如何隐藏(加密)文件夹(软件) 安卓手机隐藏(加密)文件夹(软件)的方法...

    今天给大家带来安卓手机如何隐藏(加密)文件夹(软件),安卓手机隐藏(加密)文件夹(软件)的方法,让您轻松解决问题. 在使用安卓手机的过程当中,我们往往出于各种各样的原因,对于文件夹需要做一定的保护.而 ...

  7. linux文件夹加密忘记密码,如何通过密码保护Linux上的文件夹或目录?

    假设你在Linux主目录下有一个文件夹,你把不希望任何人没有密码就能访问的安全文档文件存储在里面.那样一来,即使有人设法搞到了你的计算机,进而访问主目录,仍有另外一道防线守护着你的私密文件. Cryp ...

  8. python获取文件夹名称、文件名、去除后缀的文件名、文件改名等

    当前目录下所有文件夹下的文件名(不带后缀)写入对应txt文件(以文件夹命名)中 重命名文件 getfiledata.py # 当前目录下所有文件夹下的文件名(不带后缀)写入对应txt文件(以文件夹命名 ...

  9. 手机里tencent文件夹能删吗_【我要删除tencent文件夹】手机删了tencent文件夹_tencent什么文件夹...

    2018-08-18 09:31:39 WinXP系统经常对磁盘进行碎片整理.垃圾清理,清理时候发现有一个Tencent文件夹.Tencent是什么文件夹?可以删除吗?带着此疑问,接下去教程为大家详细 ...

  10. Windows 10 文件夹越来越大,如何瘦身,删除哪些文件?

    Windows 10 文件夹越来越大,如何瘦身,删除哪些文件? 1,清除C盘临时文件 同时按住Windows键和R键 打开运行框输入"%temp%" 界面: 定位临时文件夹 删除所 ...

最新文章

  1. 论文速读:AI能从人类的愚蠢中学到什么?
  2. jsp学习之包含——include
  3. LOJ#2353 货币兑换
  4. './mysql-bin.index' not found (Errcode: 13) 的解决方法
  5. elementUI使用checkboxgroup组件,获得value的数字集合,而不是label的文字集合 - 解决篇
  6. Android ViewPager 滑动监听事件
  7. 精讲贪吃蛇(c语言篇)(代码可直接取)
  8. 三大框架 —— 持久层框架MyBatis
  9. 一个合格的全栈工程师应该具备哪些技能?
  10. HW2021攻防演练经历碎碎念-见解
  11. NOIP / CSP-S/J初赛基础知识1
  12. php 母版页,.NET_ASP.NET 2.0 中的创建母版页,  虽然母版页和内容页功能 - phpStudy...
  13. pl/sql完全破解
  14. gm 1 n 模型matlab,灰色预测模型GM1,n模型的matlab源...
  15. JavaCV - 调整图像饱和度
  16. 转:杰克·韦尔奇: 好的CEO既有勇气放手,又懂得干涉
  17. 2013年最具技术影响力原创图书TOP10
  18. 采用网闸隔离的内外网如何进行数据的即时交互?
  19. c语言中215 10等于,云南铜业高级技工学校2014-215学年第一学期《电气控制与PLC》期中考试试卷B卷(答案)...
  20. 知乎热议:发Top5和FieldTop是什么感觉?

热门文章

  1. pytorch官方教程中文版(二)学习PyTorch
  2. 从零开始,搭建一个简单的UVM验证平台(一)
  3. python定义类方法用来计算整数的减法运算_详解python的二元算术运算,为什么说减法只是语法糖?...
  4. 《星球大战:义军崛起》
  5. 如何快速熟悉一个系统
  6. linux网页更新告知,宝塔面板7.4.2紧急安全更新通知
  7. 计算机原理较好的教材,《高等学校计算机专业教材精选·计算机原理:计算机组成原理》低价购书_教材教辅考试_孔网...
  8. 钉钉企业内部H5应用IOS点击下载pdf附件后乱码问题
  9. 微信小程序——自定义下拉框
  10. 【机器学习】专题学习丨2. 数据标准化 Normalization丨