1.情景展示
如何通过Java代码将文件移到回收站中,而不是直接删除呢?
将文件删除到回收站,我们还可以撤销,有踪迹追寻;
不放回收站直接删除,连个反悔的余地都没有,单靠日志能记录个啥。
2.问题分析
Java9以下通过jna来完成;
Java9及以上通过自带Java类Desktop.class来完成;
3.解决方案
方式一:
所需jar包
<dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna-platform</artifactId> <version>4.0.0</version> </dependency>
代码实现
/* * 将文件放到回收站 * @attention: 不管路径有没有路径分隔符,都将视作没有处理,例如: * C:UsersMarydonDesktop名字 * C:UsersMarydonDesktop名字 * 删除的都将是名字这整个文件夹 * @date: 2021-06-07 18:21 * @param: filePath 文件绝对路径 * @return: boolean 成功/失败 */ public static boolean moveFileToTrash(String filePath) { if (filePath == null || filePath.isEmpty()) { log.info("filePath shouldn't be null (or) empty"); return true; } File file = new File(filePath); if (!file.exists()) { log.info("File is not exist, seems to be it is already deleted"); return true; } com.sun.jna.platform.FileUtils fileUtils = com.sun.jna.platform.FileUtils.getInstance(); // 检测当前系统没有回收站的话,进行提醒 if (!fileUtils.hasTrash()) { log.error("No Trash available"); return false; } // 有回收站就会将文件放到回收站中 try { fileUtils.moveToTrash(new File[] { new File(filePath) }); log.info("文件/文件夹已被放入回收站"); return true; } catch (IOException e) { log.error("Error while moving the file to trash " + e.getMessage()); return false; } }
方式二:
Desktop.getDesktop().moveToTrash(file);
这个由于我用的是Java8,所以没有测试;
这个可能不支持批量删除,如果不支持的话,就搞个文件数组File[]循环调用;
如果有大佬测试过,可以批量删除的话,封装成像上面的那种,欢迎在评论区留下代码,供他人使用哦。