java 将文件放到回收站中

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:\Users\Marydon\Desktop\名字
 * C:\Users\Marydon\Desktop\名字\
 * 删除的都将是名字这整个文件夹
 * @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[]循环调用;

  如果有大佬测试过,可以批量删除的话,封装成像上面的那种,欢迎在评论区留下代码,供他人使用哦。  

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

 

posted @ 2021-06-07 18:56  Marydon  阅读(794)  评论(0编辑  收藏  举报