2011-08-18 32 views
41

So già come ottenere il testo dagli appunti in Java, ma a volte il testo è codificato in qualche strano DataFlavor, come quando si copia da Microsoft Word o da un sito Web o anche da un codice sorgente di Eclipse .Ottenere il testo leggibile solo dagli appunti

Come estrarre testo puro in chiaro da questi DataFlavor s?

+5

grazie, ma cerco di una soluzione Java, JavaScript non – clamp

risposta

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); 

con il metodo getData() e lo stringFlavor si dovrebbe ottenere testo semplice dagli Appunti.

se c'è un testo strano negli appunti, penso, questo dovrebbe essere un problema del programma che inserisce i dati negli appunti.

+0

come facciamo se vogliamo ottenere lo style..eg di testo , grassetto, corsivo ... –

+2

ATTENZIONE: Usando il codice sopra puoi colpire questo noto Java Bug http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6606476 (come ho fatto io) e non c'è lavoro in giro. Fortunatamente ho installato Perl e quindi posso richiamare uno script Perl per impostare il contenuto degli appunti in testo normale. :( –

+0

@SteveWaring grazie per l'avviso su quello strano errore uncatchable. Non ho ancora provato questo, ma ti suggerisco di impostare il flusso System.err su null e catturare i puntatori nulli quando si tenta la soluzione di Dragon8. t dimenticare di riportarlo alla normalità quando è fatto^_ ^) – ThatOneGuy

0

Prima non ho lavorato con appunti ma questo sembra intresting

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

"Per leggere i dati dalla clipboard, un programma chiama il metodo Transferable.getTransferData(). Se i dati è rappresentata da un DataFlavor che non corrisponde a una classe Java (ad esempio, plainTextFlavor), getTransferData() restituisce un InputStream in cui leggere i dati. "

Quindi, se si assegna una classe che non corrisponde, si ottiene InputStream e quindi si può leggere il testo "puro" da InputStream.

+0

[DataFlavor.plainTextFlavor] (http://docs.oracle.com/javase/7/docs/api/java/awt/datatransfer/DataFlavor.html#plainTextFlavor) è deprecato da Java 1.3. – Huxi

1

È possibile utilizzare seguente metodo di ottenere il testo di Appunto in 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 ""; 
} 
Problemi correlati