仅从剪贴板获取可读文本

时间:2011-08-18 10:13:16

标签: java clipboard

我已经知道如何从Java中的剪贴板中获取纯文本,但有时文本被编码为一些奇怪的DataFlavor,就像从Microsoft Word或网站复制时甚至是Eclipse中的源代码一样。 / p>

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

3 个答案:

答案 0 :(得分:53)

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,您应该从剪贴板中获取纯文本。

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

答案 1 :(得分:1)

您可以使用以下方法在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 "";
}

答案 2 :(得分:0)

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

来自http://docstore.mik.ua/orelly/java/awt/ch16_01.htm

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

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