将文件复制到剪贴板

时间:2016-12-31 15:54:20

标签: java linux file clipboard

我正在尝试将文件复制到系统的剪贴板中。正如我在互联网上发现的那样,我正试图这样做:

final List<File> files = new ArrayList<File>();
files.add(new File("pathToFile"));

Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
    new Transferable() {
    @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 files;
    }
}, null);

然而,在我运行该代码之后,我无法从剪贴板粘贴文件(在桌面和系统资源管理器中尝试过)。之后我甚至试图进入睡眠状态,因为我已经读过JVM必须运行才能粘贴该剪贴板内容,但它对我不起作用。
不过Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);正在返回我复制到剪贴板中的相应文件 我发现的一件事是Toolkit.getDefaultToolkit().getSystemClipboard().isDataFlavorAvailable(DataFlavor.javaFileListFlavor);返回false。这是否意味着剪贴板不支持文件?这是没有意义的,因为我能够使用Ctlr + C和Ctrl + V在资源管理器中复制粘贴文件。

我不知道它是否重要,但我在Linux Mint下运行我的测试。

任何人都可以向我解释为什么我不能粘贴复制的文件或我如何复制它以便能够通过Ctrl + V系统粘贴它?

1 个答案:

答案 0 :(得分:0)

您可以使用终端命令

String[] args = new String[] {"/bin/bash", "-c","Your command at terminal", "with", "args"};
Process proc = new ProcessBuilder(args).start();