将压缩文件从swing拖放到本机[更新]

iyfjxgzm  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(293)

我正在尝试通过拖放操作将文件从压缩的归档文件移动到本机系统(basycally,windows的eplorer)。
我现在唯一的想法是创建一个transferhandler,当启动它时,它将在一个临时目录中解压该文件,并将该文件设置为transferable。下面是一段让我更清楚的代码:

private class FileTransferHandler extends TransferHandler {
    protected Transferable createTransferable(JComponent c) {
        List<File> files = new ArrayList<File>();

        try {
            File temp = createTempDirectory();
            String path = temp.getAbsolutePath();
            decompressTo(path);
            files.add(new File(path));
        } catch (Exception e) { e.printStackTrace(); };
        return new FileTransferable(files);
    }

    public int getSourceActions(JComponent c) {
        return COPY;
    }
}

private class FileTransferable implements Transferable {
    private List<File> files;

    public FileTransferable(List<File> files) {
       this.files = files;
    }

    public DataFlavor[] getTransferDataFlavors() {
        return new DataFlavor[]{ DataFlavor.javaFileListFlavor };
    }

    public boolean isDataFlavorSupported(DataFlavor flavor) {
        return flavor.equals(DataFlavor.javaFileListFlavor);
    }

    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
        if (!isDataFlavorSupported(flavor)) {
            throw new UnsupportedFlavorException(flavor);
        }
        return files;
    }
}

(不再有效:让我困惑的是,它以某种方式工作:但只有在我松开鼠标按钮之后,我才不做任何其他事情。)
更新:在更多的测试之后,我发现在我点击一个接受dataflavor的区域之后,文件数据实际上从temp目录传输到了目的地。如果我在文件夹中单击,临时文件将被传输到该文件夹。如果在控制台窗口中单击,临时文件的路径将显示在控制台窗口中。
所以,如果你愿意的话,我想要一些指针来指引我正确的方向。
p、 s:解压到临时文件夹的想法最初是在观察到winrar正在做同样的事情之后产生的。
p、 注:如果这个问题看起来很愚蠢,我很抱歉,但我主要是一个网络程序员,只是涉足桌面编程。

56lgkhnf

56lgkhnf1#

很明显,这已经接近你能得到的最好结果了。我有时间的时候会查你的密码。

相关问题