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

时间:2017-03-07 14:00:47

标签: java swing file java-8 java-7

我正在尝试创建GUI的示例,删除文件和/或目录当用户点击Button时,我看到文件永久删除,如何使其移动到回收站而不是

  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);
        }
    }

1 个答案:

答案 0 :(得分:1)

实际上,这是一个被解雇但被忽略的错误,因为开发人员认为它won't be cross-platform-compatible如果移动到添加的回收站功能。你可以阅读它here

使用 C ++ :但您可以使用External APIs。在JNI的帮助下调用Windows SHFileOperation API,在FO_DELETE结构中设置SHFILEOPSTRUCT标记。

这是Reference

使用 JAVA :使用[com.sun.jna.platform.win32.W32FileUtils],其中定义了moveToTrashhasTrash方法。

另一种方法是使用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");
    }
}
}