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

Java系统剪贴板可以复制文件吗?,第1张

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

本质上是。您需要记住,drag’n’drop API和剪贴板API使用相同的概念a

Transferable
,将数据包装到
DataFlavor
s中,因此您可以根据目标系统想要使用的风格来不同地传输数据

通常,在传输文件时,Java使用a

java.util.List
和a
DataFlavor.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资源管理器)



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5439083.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存