我已经知道如何在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
,你应该能够从剪贴板中获取纯文本。
如果剪贴板中存在奇怪的文本,我认为这可能是将数据放入剪贴板的程序的问题。
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中读取“纯文本”。