2011-08-18 263 views
41

可讀的文本,我已經知道如何從Java中的剪貼板獲得純文本,但有時文本編碼在一些奇怪的DataFlavor,從Microsoft Word或從Eclipse的網站或者甚至是源代碼進行復印時,像。僅獲得從剪貼板

如何從這些DataFlavor s中提取純淨的純文本?

+5

謝謝,但我要尋找一個Java解決方案,而不是JavaScript的 – clamp

回答

49
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,您應該從剪貼板中獲取純文本。

如果剪貼板中有奇怪的文本,我認爲這應該是一個將數據放入剪貼板的程序的問題。

+0

我們該怎麼做,如果我們想要得到的文本style..eg ,粗體,斜體... –

+2

警告:使用上面的代碼,你可以打這個已知的Java Bug http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6606476(就像我做的那樣),並且沒有任何工作周圍。幸運的是,我安裝了Perl,因此我可以調用Perl腳本將剪貼板內容設置爲純文本。 :( –

+0

@SteveWaring感謝對奇抓不到錯誤的擡頭。沒有測試,但我會建議設置System.err的流爲null,抓空指針試圖Dragon8的解決方案時。(當然不要」 t完成時忘記將其設置回正常^ _ ^) – ThatOneGuy

0

首先我還沒有與剪貼板工作,但,這似乎intresting

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

「從剪貼板中讀取數據,程序調用Transferable.getTransferData()方法。如果數據表示通過與Java類不相對應的DataFlavor(例如,plainTextFlavor),getTransferData()將返回一個InputStream以供您從中讀取數據。「

所以,如果你給它一個不對應的類,你就得到了InputStream,然後你就可以自己從InputStream中讀取「純」文本。

+0

[DataFlavor.plainTextFlavor](http://docs.oracle.com/javase/7/docs/api/java/awt/datatransfer/DataFlavor.html#plainTextFlavor )自Java 1.3以來已被棄用。 – Huxi

1

你可以用下面的方法得到剪貼板中的文本在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 ""; 
}