Java实时监听文件夹,实现实时监听微信接收的文件,去掉文件的只读属性
前言
众所周知,小而美软件每次更新都不干人事啊。上次忘了哪个版本更新的,接收到的文件一律是只读文件,虽然只需要右键属性把只读勾选去掉就行,但是每次接收了个文件都要这么做属实是有点麻烦。所以就自己写了个小工具,让工具帮我们做这件事。
实时监听文件夹变化,我们用 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实时监听文件夹,实现实时监听微信接收的文件,去掉文件的只读属性相关推荐
- Python的看门狗实现自动化实时对服务器、Windows或Linux文件夹的实时监控
众所周知,在运维过程中,实时获取目标文件夹至关重要,Python的watchdog是用程序来监视文件系统事件Python库,所以用该库可以实现对文件夹的实时监控,filenotify.py代码如下: ...
- java获得src文件夹下的图片和 获得resource目录下的文件
java获得src文件夹下的图片和 获得resource目录下的文件 1 获得src文件夹下的图片 文件位置 获得url代码 URL url= getClass().getClassLoader(). ...
- python遍历目录压缩文件夹然后在发送邮件_python目录操作之python遍历文件夹后将结果存储为xml...
Linux服务器有CentOS.Fedora等,都预先安装了Python,版本从2.4到2.5不等,而Windows类型的服务器也多数安装了Python,因此只要在本机写好一个脚本,上传到对应机器,在 ...
- Python 连接FTP服务器并实现文件夹下载实例演示,python区分ftp目录下文件和文件夹方法,ftp目录下包含中文名问题处理
Python 连接 FTP 服务器并实现文件夹下载实例演示 第一章:连接 FTP 服务器并实现文件夹下载 ① 连接 FTP 服务器 ② 进入指定目录并显示文件信息 ③ 区分文件和文件夹名 ④ 文件夹名 ...
- 怎样清除手机中的html文件夹,怎么彻底清除手机APP卸载后的残留文件夹 能删与不能删文件名...
手机里的文件和手机下载了app之后,即使卸载,也很容易有垃圾残留,而且占用的空间还挺多,但是根本不知道哪些是垃圾,要怎么清除这些垃圾? 一般清理垃圾软件,如360,腾讯管家等可以清除手机缓存, ...
- android系统密码文件夹,安卓手机如何隐藏(加密)文件夹(软件) 安卓手机隐藏(加密)文件夹(软件)的方法...
今天给大家带来安卓手机如何隐藏(加密)文件夹(软件),安卓手机隐藏(加密)文件夹(软件)的方法,让您轻松解决问题. 在使用安卓手机的过程当中,我们往往出于各种各样的原因,对于文件夹需要做一定的保护.而 ...
- linux文件夹加密忘记密码,如何通过密码保护Linux上的文件夹或目录?
假设你在Linux主目录下有一个文件夹,你把不希望任何人没有密码就能访问的安全文档文件存储在里面.那样一来,即使有人设法搞到了你的计算机,进而访问主目录,仍有另外一道防线守护着你的私密文件. Cryp ...
- python获取文件夹名称、文件名、去除后缀的文件名、文件改名等
当前目录下所有文件夹下的文件名(不带后缀)写入对应txt文件(以文件夹命名)中 重命名文件 getfiledata.py # 当前目录下所有文件夹下的文件名(不带后缀)写入对应txt文件(以文件夹命名 ...
- 手机里tencent文件夹能删吗_【我要删除tencent文件夹】手机删了tencent文件夹_tencent什么文件夹...
2018-08-18 09:31:39 WinXP系统经常对磁盘进行碎片整理.垃圾清理,清理时候发现有一个Tencent文件夹.Tencent是什么文件夹?可以删除吗?带着此疑问,接下去教程为大家详细 ...
- Windows 10 文件夹越来越大,如何瘦身,删除哪些文件?
Windows 10 文件夹越来越大,如何瘦身,删除哪些文件? 1,清除C盘临时文件 同时按住Windows键和R键 打开运行框输入"%temp%" 界面: 定位临时文件夹 删除所 ...
最新文章
- win7电脑蓝牙 耳机
- Requirement already satisfied 解决方法
- Neutron — VLAN aware VMs 与 VLAN transparent
- 将jar文件转换成exe可执行文件
- Android开发工具之Android Studio----版本控制SVN使用(一)
- 受欢迎的五个开源可视化工具——你的选择是?
- axis=0 与axis=1 的区分
- 给力!使用MacPilot解锁macOS 1200多个隐藏功能!(支持M1处理器mac)
- C语言求两个数的最大公约数
- linux之at,crontab
- 数组排序-冒泡排序和选择排序
- 寻找关键之年的榜样和标准
- python训练神经网络模型_bp神经网络python 训练
- 概率图模型(PGM):贝叶斯网(Bayesian network)初探
- 401.3 您未被授权查看该页 错误原因和解决方案
- 安防监控专用工业交换机与普通交换机的区别
- 2 SAP SCC1同一服务器传请求号
- Java使用poi-tl生成word文档
- 基于java的古诗词生成管理系统
- selenium源码通读·4 |webdriver/common分析