JavaFx将文件复制到系统剪贴板并粘贴到操作系统

时间:2017-07-27 14:04:33

标签: javafx operating-system copy clipboard paste

我遇到以下问题:我将文件或文件夹复制到系统剪贴板。这很简单,这里是代码:

import javafx.scene.input.Clipboard;
import javafx.scene.input.ClipboardContent;
import java.nio.file.Path;

@Override
public void copyHandler(Path path) {
    ClipboardContent content = new ClipboardContent();
    content.putFiles(singletonList(path.toFile()));

    Clipboard clipboard = Clipboard.getSystemClipboard();
    clipboard.setContent(content);
}

但是在成功复制后,我转到我的操作系统(Ubuntu 16.04)文件系统资源管理器,单击鼠标右键并尝试粘贴,但粘贴菜单被禁用。我的方法出了什么问题?

1 个答案:

答案 0 :(得分:1)

这里是Ubuntu Nautilus文件管理器的具体解决方案:

public static final DataFormat GNOME_FILES = new DataFormat("x-special/gnome-copied-files");

if (platform == Platform.Linux64 || platform == Platform.Linux32) {

        final StringBuilder builder = new StringBuilder("copy\n");

        paths.forEach(builder, (path, b) ->
                b.append(path.toUri().toASCIIString()).append('\n'));

        builder.delete(builder.length() - 1, builder.length());

        final ByteBuffer buffer = ByteBuffer.allocate(builder.length());

        for (int i = 0, length = builder.length(); i < length; i++) {
            buffer.put((byte) builder.charAt(i));
        }

        buffer.flip();

        content.put(GNOME_FILES, buffer);
    }