2011-08-18 11 views
41

Już wiem, jak uzyskać zwykły tekst ze schowka w Javie, ale czasami tekst jest zakodowany w jakimś dziwnym DataFlavor, np. Podczas kopiowania z Microsoft Word lub ze strony internetowej, a nawet kodu źródłowego z Eclipse .Uzyskaj tekst czytelny tylko ze schowka

Jak wyodrębnić czysty zwykły tekst z tych DataFlavor s?

+5

dzięki, ale szukam rozwiązania java, javascript – clamp

Odpowiedz

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

z metodą getData() i stringFlavor powinieneś otrzymać zwykły tekst ze schowka.

jeśli w schowku jest dziwny tekst, to myślę, że powinien to być problem programu, który umieszcza dane w schowku.

+0

jak nie zrobimy, jeśli chcemy uzyskać style..eg tekstu , pogrubienie, kursywa ... –

+2

OSTRZEŻENIE: Korzystając z powyższego kodu, możesz uderzyć w ten znany błąd Java http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6606476 (tak jak ja) i nie ma pracy na około. Na szczęście mam zainstalowany Perl, więc mogę wywołać skrypt Perla, aby ustawić zawartość schowka na zwykły tekst. :( –

+0

@SteveWarne dzięki za te dziwne nieprzeniknione błędy.Nie testowałem tego jeszcze, ale proponuję ustawienie strumienia System.err na zero i łapanie wskaźników zerowych przy próbie rozwiązania Dragon8. (Oczywiście, że nie t zapomnij przywrócić go do normalnego po zrobieniu^_ ^) – ThatOneGuy

0

Najpierw nie pracowali ze schowka ale to wydaje się ciekawie

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

„Aby odczytać dane ze schowka, program wywołuje metodę Transferable.getTransferData(). Jeśli dane są reprezentowane przez DataFlavor, który nie odpowiada klasie Java (na przykład plainTextFlavor), getTransferData() zwraca InputStream, abyś mógł odczytać dane. "

Więc jeśli dasz mu klasę, która nie odpowiada, otrzymasz InputStream, a następnie możesz sam odczytać "czysty" tekst z InputStream.

+0

[DataFlavor.plainTextFlavor] (http://docs.oracle.com/javase/7/docs/api/java/awt/datatransfer/DataFlavor.html#plainTextFlavor) jest przestarzałe od wersji Java 1.3. – Huxi

1

można użyć następującej metody coraz schowka tekst w języku 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 ""; 
} 
Powiązane problemy