Java 仅从剪贴板获取可读文本

Java 仅从剪贴板获取可读文本,java,clipboard,Java,Clipboard,我已经知道如何用Java从剪贴板中获取纯文本,但有时文本会用一些奇怪的DataFlavor编码,比如从Microsoft Word或网站复制,甚至从Eclipse复制源代码 如何从这些DataFlavors中提取纯纯文本 import java.awt.HeadlessException; import java.awt.Toolkit; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Unsupport

我已经知道如何用Java从剪贴板中获取纯文本,但有时文本会用一些奇怪的
DataFlavor
编码,比如从Microsoft Word或网站复制,甚至从Eclipse复制源代码

如何从这些
DataFlavor
s中提取纯纯文本

import java.awt.HeadlessException;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;

String data = (String) Toolkit.getDefaultToolkit()
                .getSystemClipboard().getData(DataFlavor.stringFlavor); 
使用
getData()
方法和
stringFlavor
可以从剪贴板获取纯文本


如果剪贴板中有奇怪的文本,我认为,这应该是将数据放入剪贴板的程序的问题。

首先,我没有使用剪贴板,但这似乎很有趣

要从剪贴板读取数据,程序将调用Transferable.getTransferData()方法。如果数据由与Java类(例如,plainTextFlavor)不对应的DataFlavor表示,则getTransferData()将返回一个InputStream供您从中读取数据


因此,如果您给它一个不对应的类,您将获得InputStream,然后您可以自己从InputStream读取“纯”文本。

您可以使用以下方法获取Java中的剪贴板文本:

public String getClipBoard(){
    try {
        return (String)Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor);
    } catch (HeadlessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();            
    } catch (UnsupportedFlavorException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();            
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return "";
}

谢谢,但我正在寻找一个java解决方案,而不是java 1.3之后就不推荐使用javascript。警告:使用上面的代码,您可以发现这个已知的java错误(正如我所做的),并且没有解决方法。幸运的是,我安装了Perl,因此可以调用Perl脚本将剪贴板内容设置为纯文本:(@SteveWaring感谢您提醒我们注意这个奇怪的不可修补错误。我还没有测试过这个问题,但我建议在尝试Dragon8的解决方案时,将System.err流设置为null并捕获null指针。(当然,完成后不要忘了将其设置回正常状态^ ^)在无头模式浏览器中有没有办法做到这一点?