我正在尝试通过拖放操作将文件从压缩的归档文件移动到本机系统(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、 注:如果这个问题看起来很愚蠢,我很抱歉,但我主要是一个网络程序员,只是涉足桌面编程。
1条答案
按热度按时间56lgkhnf1#
很明显,这已经接近你能得到的最好结果了。我有时间的时候会查你的密码。