前言

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

实时监听文件夹变化,我们用 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. win7电脑蓝牙 耳机
  2. Requirement already satisfied 解决方法
  3. Neutron — VLAN aware VMs 与 VLAN transparent
  4. 将jar文件转换成exe可执行文件
  5. Android开发工具之Android Studio----版本控制SVN使用(一)
  6. 受欢迎的五个开源可视化工具——你的选择是?
  7. axis=0 与axis=1 的区分
  8. 给力!使用MacPilot解锁macOS 1200多个隐藏功能!(支持M1处理器mac)
  9. C语言求两个数的最大公约数
  10. linux之at,crontab
  11. 数组排序-冒泡排序和选择排序
  12. 寻找关键之年的榜样和标准
  13. python训练神经网络模型_bp神经网络python 训练
  14. 概率图模型(PGM):贝叶斯网(Bayesian network)初探
  15. 401.3 您未被授权查看该页 错误原因和解决方案
  16. 安防监控专用工业交换机与普通交换机的区别
  17. 2 SAP SCC1同一服务器传请求号
  18. Java使用poi-tl生成word文档
  19. 基于java的古诗词生成管理系统
  20. selenium源码通读·4 |webdriver/common分析

热门文章

  1. 无人机运药将覆盖卢旺达全境
  2. 培训day09(推单)
  3. 史上最全 Android 应用角标适配方法
  4. html列表的伸缩跟舒展,舒展的意思是什么
  5. Vue项目搭建——Vue CLI安装失败解决方法
  6. 河南科技学院CSDN俱乐部年度巡讲
  7. Sphinx学习笔记2
  8. CSDN第一次写博客
  9. 【机器学习】专题学习丨2. 数据标准化 Normalization丨
  10. 黑马程序员_java01_基本知识点