zoukankan      html  css  js  c++  java
  • 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: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[]循环调用;

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

    写在最后

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

     相关推荐:

  • 相关阅读:
    Allegro PCB Design GXL (legacy) 使用slide无法将走线推挤到焊盘的原因
    OrCAD Capture CIS 16.6 导出BOM
    Altium Designer (17.0) 打印输出指定的层
    Allegro PCB Design GXL (legacy) 将指定的层导出为DXF
    Allegro PCB Design GXL (legacy) 设置十字大光标
    Allegro PCB Design GXL (legacy) 手动更改元器件引脚的网络
    magento产品导入时需要注意的事项
    magento url rewrite
    验证台湾同胞身份证信息
    IE8对css文件的限制
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/14860092.html
Copyright © 2011-2022 走看看