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

如何在Java中将文件/dir移动到回收站,而不是永久删除它,java,swing,file,java-8,java-7,Java,Swing,File,Java 8,Java 7,我试图创建一个GUI示例,当用户单击按钮时删除文件和/或目录,但我看到文件被永久删除,如何让它移动到回收站而不是这个 if (File_path.getText().isEmpty()) { JOptionPane.showMessageDialog(null, "Please select a file or directory", "Info", JOptionPane.INFORMATION_MESSAGE); } else { File Fil

我试图创建一个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);
        }
    }

实际上,这是一个被触发但被忽略的bug,因为开发人员认为,如果添加了“移动到回收站”功能,它将不兼容跨平台。你可以读到它

使用C++:但您可以使用
外部API
。在
JNI
的帮助下,调用Windows
SHFileOperation
API,在
SHFILEOPSTRUCT
结构中设置
fou 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");
    }
}
}

@Eugene我从8年前就看到了这个答案,可能因为删除一个文件排了很长的一行(大约25行)而感到困惑@DRIDO检查编辑:请:只要……这个引用解释如何在C++上不这样做Java@DrMido添加了Java部件:)。您的问题不重复,但仍标记为重复:/。如果这作为解决方案让我满意,请让我知道:)迷你们我没有对你的评论投反对票,无论如何,你能在这里编辑你的评论吗“你可以阅读”我找不到这个bug的链接