web-dev-qa-db-ja.com

クリップボードからのみ読み取り可能なテキストを取得する

Javaのクリップボードからプレーンテキストを取得する方法は既に知っていますが、Microsoft WordやWebサイト、またはEclipseのソースコードからコピーするときなど、テキストが奇妙なDataFlavorでエンコードされることがあります。

これらのDataFlavorsから純粋なプレーンテキストを抽出する方法は?

46
clamp
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を使用して、クリップボードからプレーンテキストを取得する必要があります。

クリップボードに奇妙なテキストがある場合、これはデータをクリップボードに入れるプログラムの問題であると思います。

55
Dragon8

次のメソッドを使用して、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 "";
}
1
Mihir Patel

最初はクリップボードを使ったことがありませんが、これは興味深いようです

http://docstore.mik.ua/orelly/Java/awt/ch16_01.htm から

「クリップボードからデータを読み取るために、プログラムはTransferable.getTransferData()メソッドを呼び出します。データがJavaクラスに対応しないDataFlavorで表される場合(たとえば、plainTextFlavor )、getTransferData()は、データを読み取るためのInputStreamを返します。

したがって、対応していないクラスを指定すると、InputStreamが取得され、InputStreamから「純粋な」テキストを自分で読み取ることができます。

0
Farmor