使用 Java 將文字複製到剪貼簿
1.概述
在本教程中,我們將討論如何在 Java 中將文字複製到系統剪貼簿。這些方法不僅限於 GUI 應用程序,也適用於控制台應用程式。
我們將研究AWT工具包並學習如何在 Java 中複製貼上適用於所有平台的文字。
2. AWT 工具包
AWT(抽象視窗工具包)是一種 GUI API,可用於使用 Java 開發跨平台圖形應用程式。從根本上講,它是原生作業系統 GUI 的包裝器。因此,它可以存取原生用戶介面(包括原生剪貼簿 API)等資源。
我們的目標是在所有類型的 Java 應用程式(包括控制台程式)中將文字複製到剪貼簿。即使我們對 GUI 並不特別感興趣,AWT 也允許我們在不運行底層 GUI 引擎的情況下將文字複製到剪貼簿。
2.1. 複製到剪貼簿
首先,讓我們寫一個將文字複製到剪貼簿的方法:
public static void copyToClipboard(String text) {
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection data = new StringSelection(text);
cb.setContents(data, null);
}
getDefaultToolkit()
方法傳回目前平台的工具包實例。類似地, getSystemClipboard getSystemClipboard()
方法會建立平台共用剪貼簿的實例。 StringSelection
可以更輕鬆地將純文字資料複製到系統剪貼簿。
setContents()
方法需要複製文字和ClipboardOwner
。 ClipboardOwner ClipboardOwner
我們追蹤已複製到系統剪貼簿的資料的所有權。因此,如果程式的任何其他部分或其他進程將資料複製到系統剪貼簿,我們將透過回調收到通知。在回調中,我們可以執行清理和其他操作,例如清除敏感資料或記錄統計資料。
在我們的程式碼中,我們將ClipboardOwner
設定為null
,因為我們不需要在失去剪貼簿所有權時收到通知。通常,對於簡單的複製貼上操作,我們不需要所有權。
2.2. 從剪貼簿檢索
類似地,我們也可以從剪貼簿中檢索資料:
public static String copyFromClipboard() throws UnsupportedFlavorException, IOException {
Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable transferable = cb.getContents(null);
if (transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) {
String data = (String) transferable.getTransferData(DataFlavor.stringFlavor);
return data;
}
System.out.println("Couldn't get data from the clipboard");
return null;
}
再次,我們建立系統Clipboard
的一個實例。然後,我們將原始字串資料從剪貼簿檢索到Transferable
。接下來,我們檢查檢索到的資料是否可以用作標準String
。我們透過將其與DataFlavor
類別的stringFlavor
進行比較來做到這一點。 DataFlavor 提供有關剪貼簿中DataFlavor
的元資料。例如,如果我們需要影像數據,我們會使用DataFlavor.imageFlavor
。此外,還有其他類型的資料可供我們檢查。
在程式碼中,我們期望資料為String
類型。在這種情況下,我們只需將檢索到的資料轉換為String
即可,因為getTransferData()
傳回的是一個Object
,我們必須將其轉換為適當的類型。最後,我們返回數據。
此外,從剪貼簿檢索資料時必須處理異常。如果直接檢索資料失敗,整個程式可能會崩潰。因此,我們應該使用if
保護或處理相應的異常。
3. 結論
在本文中,我們學習如何在 Java 中將文字複製到剪貼簿,該功能可在 Windows、macOS 和 Linux 上運行。與往常一樣,本文中使用的程式碼可以在 GitHub 上找到。