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

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

问题描述:

我有以下问题:我将文件或文件夹复制到系统剪贴板。它真的简单,这里的代码:JavaFx将文件复制到系统剪贴板并粘贴到操作系统

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); 
} 

但成功副本后,我去我的OS(Ubuntu的16.04)的文件系统管理器中单击鼠标右键,并尝试粘贴,但粘贴菜单将被禁用。我的方法有什么问题?

+0

试试这个:'content.putFiles(java.util.Collections.singletonList(新文件( “文件路径”)));' – Calips

这里是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); 
    }