Java系统剪贴板可以复制文件吗?

我使用Java系统剪贴板来传输文本和图像,但我想知道它是否可以复制和粘贴文件? 如果是这样我在哪里可以找到一些示例代码?

我发现了一个类似的问题: 如何使用Java复制文件并将其粘贴到剪贴板?

但我无处可找到“剪贴板”这个词,我不知道如何使用它。

我用来复制图像的方法如下所示:

public static void setClipboard(Image image) // This method writes a image to the system clipboard : from exampledepot.com { ImageSelection imgSel=new ImageSelection(image); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(imgSel,null); } public Image getImageFromClipboard() // Get an image off the system clipboard { Transferable transferable=Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null); if (transferable!=null&&transferable.isDataFlavorSupported(DataFlavor.imageFlavor)) { try { return (Image)transferable.getTransferData(DataFlavor.imageFlavor); } catch (UnsupportedFlavorException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } else System.err.println("getImageFromClipboard: That wasn't an image!"); return null; } 

如何修改上面的代码来传输文件?

基本上,是的。 您需要记住,拖放API和剪贴板API都使用相同的Transferable概念,它将数据包装到DataFlavor ,因此您可以根据目标系统想要的风格来不同地传输数据。使用

通常,在传输文件时,Java使用java.util.ListDataFlavor.javaFileListFlavor 。 不用说,没有很好的“包装”类,所以你需要自己提供,例如……

 import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.ClipboardOwner; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { File file = new File("/path/to/your/file"); List listOfFiles = new ArrayList(); listOfFiles.add(file); FileTransferable ft = new FileTransferable(listOfFiles); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ft, new ClipboardOwner() { @Override public void lostOwnership(Clipboard clipboard, Transferable contents) { System.out.println("Lost ownership"); } }); } public static class FileTransferable implements Transferable { private List listOfFiles; public FileTransferable(List listOfFiles) { this.listOfFiles = listOfFiles; } @Override public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[]{DataFlavor.javaFileListFlavor}; } @Override public boolean isDataFlavorSupported(DataFlavor flavor) { return DataFlavor.javaFileListFlavor.equals(flavor); } @Override public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { return listOfFiles; } } } 

在我的测试中,我能够将一个File放入List ,包装到Transferable ,将其传递给Clipboard ,并能够通过系统粘贴文件(Windows资源管理器)