如何在Java中将文件/目录移动到回收站而不是永久删除

5

我正在尝试创建一个GUI示例,用于删除文件和/或目录,当用户单击按钮时。但是我发现文件被永久删除了,如何使其移动到回收站而不是被彻底删除。

  if (File_path.getText().isEmpty()) {
        JOptionPane.showMessageDialog(null, "Please select a file or directory", "Info", JOptionPane.INFORMATION_MESSAGE);
    } else {
        File FileName = new File(File_path.getText());
        boolean FileDeleted = FileName.delete();
        if (FileDeleted == true) {
            JOptionPane.showMessageDialog(null, "File Deleted Successfully", "Info", JOptionPane.INFORMATION_MESSAGE);
        } else {
            JOptionPane.showMessageDialog(null, "File Not Found", "Info", JOptionPane.INFORMATION_MESSAGE);
        }
    }

@Eugene,我看到这个回答已经有8年了,可能由于要删除一个文件需要长达25行的代码而让人感到困惑! - Dr Mido
@DrMido请检查编辑是否正确 :) - minigeek
2
直到Java 9才花了这么长时间... - Holger
1个回答

3
实际上,存在一个被忽视的错误,因为开发人员认为如果添加到回收站功能,它就不会跨平台兼容。你可以在这里阅读有关此问题的详细信息:here 使用C++:但是,您可以使用外部API完成。借助JNI调用Windows的SHFileOperation API,在SHFILEOPSTRUCT结构中设置FO_DELETE标志。
请参考参考资料 使用JAVA:使用com.sun.jna.platform.win32.W32FileUtils,该工具类定义了moveToTrash和hasTrash方法。
另一种方法是使用com.sun.jna.platform.FileUtils;
示例代码:
import java.io.File;
import java.io.IOException;

import com.sun.jna.platform.FileUtils;

public class MoveToTrash {

  public static void main(String[] args){
    FileUtils fileUtils = FileUtils.getInstance();
    if (fileUtils.hasTrash()) {
        try {
            fileUtils.moveToTrash( new File[] {new File("c:/folder/abcd.txt") });                
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
    else {
        System.out.println("No Trash available");
    }
}
}

该参考文献解释了如何在C++上实现,而不是Java。 - Dr Mido
@DrMido 增加了 Java 部分 :) 。 你的问题不是重复,但却被标记为重复 :/。如果这个回答对你有帮助,请告诉我 :)。 - minigeek
小极客,我没有对你的评论投反对票,不过你能否在这里编辑一下你的评论:“你可以阅读相关内容”,因为我找不到这个错误的链接。 - Dr Mido

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接