2011-08-18 12 views
41

Ya sé cómo obtener texto sin formato del portapapeles en Java, pero a veces el texto está codificado en algún extraño DataFlavor, como al copiar desde Microsoft Word o desde un sitio web o incluso el código fuente de Eclipse .Obtener texto legible solo del portapapeles

Cómo extracto puro de texto sin formato a partir de estos DataFlavor s?

+5

gracias, pero estoy en busca de una solución de Java, JavaScript no – clamp

Respuesta

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 el método getData() y el stringFlavor debe obtener texto sin formato del portapapeles.

si hay texto en el portapapeles raro, creo, esto debe un problema de la Programm que pone los datos en el portapapeles.

+0

¿cómo lo hacemos si queremos obtener el texto style..eg , negrita, cursiva ... –

+2

AVISO: Utilizar el código anterior se puede ir a este conocido Bug Java http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6606476 (como yo) y no hay trabajo alrededor. Afortunadamente, tengo Perl instalado y, por lo tanto, puedo invocar una secuencia de comandos de Perl para configurar el contenido del portapapeles en texto sin formato. :( –

+0

@SteveWaring gracias por las cabezas para arriba en ese error extraño inalcanzable. No he probado esto todavía, pero me gustaría sugerir el establecimiento de la corriente System.err en null y la captura de punteros nulos cuando se trata de la solución de Dragon8. (Por supuesto Don' se olvide de fijarlo de nuevo a la normalidad cuando se hace^_ ^) – ThatOneGuy

0

En primer lugar no he trabajado con el portapapeles pero esto parece Intresting

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

"Para leer los datos desde el portapapeles, un programa llama al método Transferable.getTransferData(). Si se representan los datos por un DataFlavor que no corresponde a una clase Java (por ejemplo, plainTextFlavor), getTransferData() devuelve un InputStream para que pueda leer los datos desde ".

Así que si se le da una clase que no correspont se obtiene el InputStream y luego se puede leer el texto "puro" de la InputStream mismo.

+0

[DataFlavor.plainTextFlavor] (http://docs.oracle.com/javase/7/docs/api/java/awt/datatransfer/DataFlavor.html#plainTextFlavor) está en desuso desde Java 1.3. – Huxi

1

Puede utilizar siguiente método de conseguir el texto del portapapeles en 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 ""; 
} 
Cuestiones relacionadas