Copying to the clipboard in Java

I want to set the user's clipboard to a string in a Java console application. Any ideas?

93195 次浏览

Use the Toolkit to get the system clipboard. Create a StringSelection with the String and add it to the Clipboard.

Simplified:

StringSelection selection = new StringSelection(theString);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(selection, selection);

Here is a simple SSCCE to accomplish this:

import java.awt.*;
import java.awt.datatransfer.*;
import java.io.*;


class ClipboardTest
{
public static void main(String[] args)
throws UnsupportedFlavorException, IOException
{
Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection testData;


//  Add some test data


if (args.length > 0)
testData = new StringSelection( args[0] );
else
testData = new StringSelection( "Test Data" );


c.setContents(testData, testData);


//  Get clipboard contents, as a String


Transferable t = c.getContents( null );


if ( t.isDataFlavorSupported(DataFlavor.stringFlavor) )
{
Object o = t.getTransferData( DataFlavor.stringFlavor );
String data = (String)t.getTransferData( DataFlavor.stringFlavor );
System.out.println( "Clipboard contents: " + data );
}


System.exit(0);
}
}

If you are on Linux and using OpenJDK, it will not work. You must use the Sun JDK on Linux for it to work.

In Linux with xclip:

Runtime run = Runtime.getRuntime();
Process p = null;
String str = "hello";
try {
p = run.exec(new String[]{"sh", "-c", "echo " + str + " | xclip -selection clipboard"});
}
catch (Exception e) {
System.out.println(e);
}

For anyone still stumbling upon this post searching for the JavaFX way to accomplish this, here you go:

ClipboardContent content = new ClipboardContent();
content.putString("Some text");
content.putHtml("<b>Bold</b> text");
Clipboard.getSystemClipboard().setContent(content);

For further information, read the documentation.