Java 仅从剪贴板获取可读文本
我已经知道如何用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
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指针。(当然,完成后不要忘了将其设置回正常状态^ ^)在无头模式浏览器中有没有办法做到这一点?