只从剪贴板获取可读的文字
我已经知道如何在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中读取“纯”文本。