我希望复制cli中的文件条目,并在文件资源管理器中使用ctrl+v粘贴它,我发现以下java代码可以做到这一点,如何在linux shell中做到这一点?
public static void putFileToSystemClipboard(final File fileOut) throws Exception {
final Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
final ClipboardOwner clipboardOwner = null;
final Transferable transferable = new Transferable() {
public boolean isDataFlavorSupported(final DataFlavor flavor) {
return false;
}
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] { DataFlavor.javaFileListFlavor, DataFlavor.stringFlavor };
}
public Object getTransferData(final DataFlavor flavor) {
if (flavor.equals(DataFlavor.javaFileListFlavor)) {
final List<String> list = new ArrayList<>();
list.add(fileOut.getAbsolutePath());
return list;
}
if (flavor.equals(DataFlavor.stringFlavor)) {
return fileOut.getAbsolutePath();
}
return null;
}
};
clipboard.setContents(transferable, clipboardOwner);
}发布于 2016-07-29 19:43:40
我找到了解决方案:
短中的
运行以下代码将复制"/tmp/file- to -clip/smth“,然后我可以点击ctrl+v将其粘贴到Thunar中
public class FileToClip {
public static void main(final String[] args) throws Exception {
final File file = new File("/tmp/file-to-clip/smth");
System.out.println("copy " + file.toString());
new FileToClip().toClip(file);
Thread.sleep(Long.MAX_VALUE);
}
public void toClip(final File f) throws Exception {
final Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
final ClipboardOwner clipboardOwner = null;
final Transferable transferable = new Transferable() {
public boolean isDataFlavorSupported(final DataFlavor flavor) {
return false;
}
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[]{DataFlavor.javaFileListFlavor, DataFlavor.stringFlavor, gcf};
}
public Object getTransferData(final DataFlavor flavor) {
if (flavor.equals(DataFlavor.javaFileListFlavor)) {
final List<String> list = new ArrayList<>();
list.add(f.getAbsolutePath());
return list;
}
if (flavor.equals(DataFlavor.stringFlavor)) {
return f.getAbsolutePath();
}
if (flavor.equals(gcf)) {
String p = "copy\n" +
"file://" + f.getAbsolutePath();
return new ByteArrayInputStream(p.getBytes(Charset.forName("UTF-8")));
}
return null;
}
};
clip.setContents(transferable, clipboardOwner);
}
DataFlavor gcf = createDataFlavor("x-special/gnome-copied-files", null, true);
public static DataFlavor createDataFlavor(@NotNull final String mimeType, @Nullable final Class<?> klass, final boolean register) {
try {
final DataFlavor flavor =
klass != null ? new DataFlavor(mimeType + ";class=" + klass.getName(), null, klass.getClassLoader()) : new DataFlavor(mimeType);
if (register) {
final FlavorMap map = SystemFlavorMap.getDefaultFlavorMap();
if (map instanceof SystemFlavorMap) {
((SystemFlavorMap) map).addUnencodedNativeForFlavor(flavor, mimeType);
}
}
return flavor;
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
}detail的
所有代码都可以在intellij idea this source file中找到(参见#getTransferData)
man xclip-t,-target
使用给定的目标原子指定特定的数据格式。使用-o,可以使用特殊的目标原子名称"TARGETS“来获得此选择的有效目标原子列表。有关目标原子的更多信息,请参阅ICCCM第2.6.2节
因此,我可以执行以下操作来获取目标(java中的dataflavor)
输出如下:
UTF8_STRING
TEXT
STRING
text/plain;charset=UTF-16
text/plain;charset=UTF-8
text/plain;charset=UTF-16BE
text/plain;charset=UTF-16LE
text/plain;charset=ISO-8859-1
text/plain;charset=US-ASCII
text/plain
FILE_NAME
text/uri-list
text/uri-list;charset=UTF-16
text/uri-list;charset=UTF-8
text/uri-list;charset=UTF-16BE
text/uri-list;charset=UTF-16LE
text/uri-list;charset=ISO-8859-1
text/uri-list;charset=US-ASCII
x-special/gnome-copied-files返回到我的问题,如果我在cli中复制文件并将其粘贴到gui中,我需要
https://stackoverflow.com/questions/38650970
复制相似问题