只从剪贴板获取可读的文字

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

如何从这些DataFlavor提取纯净的纯文本?

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

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

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

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

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

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

所以,如果你给它一个不符合的类,你就得到了InputStream,然后你就可以自己从InputStream中读取“纯”文本。