2011-08-18 32 views
41

Tôi đã biết cách lấy văn bản thuần từ khay nhớ tạm trong Java, nhưng đôi khi văn bản được mã hóa trong một số lạ DataFlavor, như khi sao chép từ Microsoft Word hoặc từ một trang web hoặc thậm chí mã nguồn từ Eclipse .Chỉ nhận được văn bản có thể đọc được từ clipboard

Làm thế nào để trích xuất văn bản thuần túy thuần túy từ các DataFlavor s này?

+5

cảm ơn, nhưng tôi đang tìm kiếm một giải pháp java, không javascript – clamp

Trả lời

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

với phương thức getData() và chuỗiVui lòng bạn sẽ nhận được văn bản thuần từ khay nhớ tạm.

nếu có văn bản lạ trong khay nhớ tạm, tôi nghĩ, đây là vấn đề của chương trình đưa dữ liệu vào khay nhớ tạm.

+0

làm thế nào để chúng ta làm gì nếu chúng ta muốn nhận được văn bản style..eg , in đậm, in nghiêng ... –

+2

CẢNH BÁO: Sử dụng mã ở trên, bạn có thể nhấn lỗi Java đã biết này http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6606476 (như tôi đã làm) và không có công việc xung quanh. May mắn thay tôi đã cài đặt Perl và vì vậy tôi có thể gọi một kịch bản Perl để đặt nội dung clipboard thành văn bản thuần túy. :( –

+0

@SteveWaring cảm ơn những người đứng đầu về lỗi kỳ lạ không thể sửa chữa. Chưa thử nghiệm này, nhưng tôi muốn đề nghị thiết lập các dòng System.err để null và bắt con trỏ null khi cố gắng giải pháp Dragon8. (Tất nhiên don ' Đừng quên đặt nó trở lại bình thường khi hoàn thành^_ ^) – ThatOneGuy

0

Trước tiên tôi đã không làm việc với clipboard của nhưng điều này dường như intresting

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

"Để đọc dữ liệu từ bộ nhớ tạm, một chương trình gọi phương thức Transferable.getTransferData(). Nếu dữ liệu được biểu diễn bởi một DataFlavor không tương ứng với một lớp Java (ví dụ, plainTextFlavor), getTransferData() trả về một InputStream để bạn đọc dữ liệu từ đó. "

Vì vậy, nếu bạn cho nó một lớp không sửa lỗi, bạn sẽ nhận được InputStream và sau đó bạn có thể đọc văn bản "thuần túy" từ chính InputStream.

+0

[DataFlavor.plainTextFlavor] (http://docs.oracle.com/javase/7/docs/api/java/awt/datatransfer/DataFlavor.html#plainTextFlavor) không được dùng nữa kể từ Java 1.3. – Huxi

1

Bạn có thể sử dụng phương pháp sau đây bị vào clipboard văn bản trong 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 ""; 
} 
Các vấn đề liên quan