是否可以使用Java删除回收站?

dry*_*rye 30 java recycle-bin

Java是关键.我需要能够删除文件,但用户希望能够从回收站"取消删除".据我所知,这是不可能的.有人知道吗?

Joh*_*ley 25

由于各种原因,Windows 没有对应于回收站的文件夹的概念.

正确的方法是使用JNI调用Windows SHFileOperationAPI,FO_DELETESHFILEOPSTRUCT结构中设置标志.

  • 任何使用“SHFileOperation”的内容都无法在 OS X 上运行,因为“SHFileOperation”是 Windows 的 API。 (2认同)

Hol*_*ger 14

十年后,使用Java 9,最终有一种将文件移动到垃圾箱的内置方法

java.awt.Desktop.moveToTrash(java.io.File):

public boolean moveToTrash?(File file)

将指定的文件移动到废纸篓.

参数:

file - 文件

返回:

如果成功将文件移动到废纸篓,则返回true.

可以使用此功能测试底层平台的此功能的可用性Desktop.isSupported?(Desktop.Action.MOVE_TO_TRASH).


小智 5

Java 9 有新方法,但就我而言,我仅限于 Java 8。我发现Java Native Access Platform具有hasTrash()moveToTrash()方法。我在 Win 10 和 Mac OS 上对其进行了测试(有效)。

static boolean moveToTrash(String filePath) {
        File file = new File(filePath);

        FileUtils fileUtils =  FileUtils.getInstance();
        if (fileUtils.hasTrash()) {

            try {
                fileUtils.moveToTrash(new File[] { file });
                return true;
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
        } else {
            System.out.println("No Trash");
            return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Maven 存储库 https://mvnrepository.com/artifact/net.java.dev.jna/jna-platform/5.1.0

不要混淆它是Java Native Access Platform而不是Java Native Access