使用Java如何將文本復(fù)制到剪貼板
Java將文本復(fù)制到剪貼板
關(guān)鍵代碼
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Clipboard類的2個(gè)主要方法:
setContents(Transferable contents, ClipboardOwner owner) getContents(Object requestor)
Clipboard類:實(shí)現(xiàn)使用剪切/復(fù)制/粘貼操作傳輸數(shù)據(jù)的機(jī)制的類
代碼示例(僅供參考)
package exer04; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; public class CopyToClipboard{ public static void main(String[] args) throws Exception{ Transferable canonicalNameSelection = new StringSelection("java"); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); //實(shí)現(xiàn)復(fù)制功能:將當(dāng)前程序中的字符串復(fù)制到剪貼板中去 // clipboard.setContents(canonicalNameSelection, null); canonicalNameSelection = clipboard.getContents(null); //獲取剪貼板上的內(nèi)容 Object obj = canonicalNameSelection.getTransferData(DataFlavor.stringFlavor); System.out.println(obj); } }
java實(shí)現(xiàn)復(fù)制剪切粘貼(面向接口)
功能分析
- 1.復(fù)制操作:用戶選擇要復(fù)制的文件路徑,然后程序?qū)?fù)制的文件的文件路徑存放到一個(gè)臨時(shí)文件夾中。
- 2.剪切操作:用戶選擇要剪切的文件路徑,然后程序?qū)⒓羟械奈募穆窂酱娣诺揭粋€(gè)臨時(shí)文件夾中,再將原文件刪除。復(fù)制和剪切都放在同一個(gè)臨時(shí)文件夾中。
- 3.粘貼操作:用戶選擇要粘貼的文件路徑,然后程序會(huì)從臨時(shí)文件中將用戶文件寫入用戶要粘貼的文件夾中。如果該文件夾中有同名文件,則詢問用戶是否替換原文件或跳過該文件。
- 4.進(jìn)行復(fù)制剪切操作時(shí)要判斷文件是否存在,存在才能進(jìn)行此操作,否則提示用戶文件不存在。
代碼實(shí)現(xiàn)
1.主頁(yè)面:
import java.io.IOException; import java.util.Scanner; public class MyMain { public static void main(String[] args) throws Exception { System.out.println("------------------------------"); System.out.println(" 復(fù)制粘貼剪切系統(tǒng)"); System.out.println(" 作者:蕭蕭"); System.out.println(" 版本:v1.0"); System.out.println("------------------------------"); Operation operation = new Operation(); Scanner scanner = new Scanner(System.in); // operation.copy("F:\\javafile\\a.txt"); // operation.paste("F:\\javafile\\paste\\1.txt"); //定義option,這里用char類型,用來判斷用戶輸入的是否是1-4,防止用戶輸入1-4之外的內(nèi)容 char option; //do while循環(huán),運(yùn)行時(shí)先執(zhí)行一遍再判斷循環(huán)條件 do{ //由用戶自主選擇要進(jìn)行的操作 System.out.println("請(qǐng)選擇你要執(zhí)行的操作:"); System.out.println("1.復(fù)制 2.剪切 3.粘貼 4.退出"); //定義一個(gè)String類型接收用戶輸入的內(nèi)容 String myoption = scanner.next(); //將用戶輸入的內(nèi)容轉(zhuǎn)換為char類型 option = myoption.toCharArray()[0]; //判斷用戶的選擇,從而實(shí)現(xiàn)相對(duì)應(yīng)的操作 switch (option){ case '1': operation.copy();break; //復(fù)制操作 case '2': operation.shear();break; //剪切操作 case '3': operation.paste();break; //粘貼操作 case '4': System.out.println("正在退出......");break; //用戶輸入4則退出 default: System.out.println("你選擇的功能編號(hào)不正確,請(qǐng)重新選擇!"); //如果用戶輸入1-4之外的內(nèi)容,則提示重新輸入 } }while (option != '4'); } }
2.功能實(shí)現(xiàn)頁(yè)面:
import java.io.*; import java.util.Locale; import java.util.Scanner; public class Operation implements Function{ public Operation() { } //復(fù)制和剪切功能的寫入操作 @Override public void save(String path) throws Exception{ //字符讀取,這里的path是要復(fù)制和剪切的路徑 FileReader fileReader = new FileReader(path); //字符輸出,復(fù)制和剪切后的路徑都存在一個(gè)臨時(shí)文件夾temp中 FileWriter fileWriter = new FileWriter("F:\\javafile\\temp\\1.txt"); BufferedReader bu_read = new BufferedReader(fileReader); BufferedWriter bu_write = new BufferedWriter(fileWriter); //定義變量line,接收每一行的數(shù)據(jù) String line; //判斷文件中的每一行是否為空,不為空則繼續(xù)循環(huán),為空就是沒有字符了,退出循環(huán) while ((line=bu_read.readLine())!=null){ //寫入 bu_write.write(line); //換行 bu_write.write("\n"); } //關(guān)閉文件 bu_read.close(); bu_write.close(); } //粘貼功能的寫入操作 @Override public void paste_file(String path) throws IOException { //字符讀取,因?yàn)閺?fù)制和粘貼后的文件路徑都存放在了temp中,所以要將其內(nèi)容粘貼,直接讀取temp中的文件 FileReader fileReader = new FileReader("F:\\javafile\\temp\\1.txt"); //字符輸出,這里的path是要粘貼的路徑 FileWriter fileWriter = new FileWriter(path); BufferedReader bu_read = new BufferedReader(fileReader); BufferedWriter bu_write = new BufferedWriter(fileWriter); //定義變量line,接收每一行的數(shù)據(jù) String line; //判斷文件中的每一行是否為空,不為空則繼續(xù)循環(huán),為空就是沒有字符了,退出循環(huán) while ((line=bu_read.readLine())!=null){ //寫入 bu_write.write(line); //換行 bu_write.write("\n"); } //關(guān)閉文件 bu_read.close(); bu_write.close(); } //復(fù)制文件操作 @Override public void copy() throws Exception { Scanner scanner = new Scanner(System.in); //由用戶選擇復(fù)制的文件路徑 System.out.println("你要復(fù)制的文件路徑:"); String path = scanner.next(); //定義myfile File myfile = new File(path); try{ //判斷文件是否在文件夾中存在,如果存在,則可以將這個(gè)文件復(fù)制下來 myfile.exists(); //調(diào)用復(fù)制和剪切功能的寫入操作的這個(gè)函數(shù) this.save(path); }catch (Exception e){ //不存在則拋出 文件不存在 System.out.println("文件不存在!"); } } //剪切文件操作 @Override public void shear() throws Exception{ Scanner scanner = new Scanner(System.in); //由用戶選擇剪切的文件路徑 System.out.println("你要剪貼的文件路徑:"); String path = scanner.next(); //定義myfile File myfile = new File(path); try{ //判斷文件是否在文件夾中存在,如果存在,則可以將這個(gè)文件剪切下來 myfile.exists(); //調(diào)用復(fù)制和剪切功能的寫入操作的這個(gè)函數(shù) this.save(path); //文件剪切之后,文件夾就沒有這個(gè)文件了,所以進(jìn)行刪除操作,而剪切的文件路徑已經(jīng)存放進(jìn)緩存了 //注意:必須要先把文件關(guān)閉了才能刪除文件 myfile.delete(); }catch (Exception e){ //不存在則拋出 文件不存在 System.out.println("文件不存在!"); } } //粘貼文件操作 @Override public void paste() throws Exception{ Scanner scanner = new Scanner(System.in); //由用戶選擇粘貼的文件路徑 System.out.println("你要粘貼到的文件的路徑:"); String path = scanner.next(); //定義myfile File myfile = new File(path); //當(dāng)我們將一個(gè)文件復(fù)制到一個(gè)文件夾中時(shí),如果存在同名的文件,會(huì)進(jìn)行詢問 替換源文件還是跳過 //所以判斷,如果文件存在 if(myfile.exists()){ //彈出提示 System.out.println("目標(biāo)已包含一個(gè)名為" + myfile.getName() + "的文件"); //用戶選擇替換原文件還是跳過 System.out.println("替換目標(biāo)中的文件(R)"); System.out.println("跳過該文件(S)"); //接收用戶的選擇 String option = scanner.next().toUpperCase(); switch (option) { case "R": //用戶選擇R,則替換掉原來的文件,將新的內(nèi)容寫進(jìn)文件 paste_file(path); break; case "S": //用戶選擇S,則跳過文件,新文件內(nèi)容不寫入文件中,直接break break; } }else { //如果不存在同名的文件,則直接寫入 paste_file(path); } } }
3.功能實(shí)現(xiàn)的接口:
import java.io.IOException; public interface Function { //復(fù)制功能 public void copy() throws Exception; //剪切功能 public void shear() throws Exception; //復(fù)制和剪切功能的寫入操作 public void save(String path) throws Exception; //粘貼功能 public void paste() throws Exception; //粘貼功能的寫入操作 public void paste_file(String path) throws IOException; }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot使用redis實(shí)現(xiàn)從配置到實(shí)戰(zhàn)
本文主要介紹了springboot使用redis ,采用的是RedisTemplate的形式,還有一種采用spring支持的注解進(jìn)行訪問緩存,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08JSON反序列化Long變Integer或Double的問題及解決
這篇文章主要介紹了JSON反序列化Long變Integer或Double的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01Spring占位符Placeholder的實(shí)現(xiàn)原理解析
這篇文章主要介紹了Spring占位符Placeholder的實(shí)現(xiàn)原理,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03java實(shí)現(xiàn)的2048游戲完整實(shí)例
這篇文章主要介紹了java實(shí)現(xiàn)的2048游戲,結(jié)合完整實(shí)例形式分析了java實(shí)現(xiàn)2048游戲功能的相關(guān)數(shù)值運(yùn)算、swing組件布局、事件響應(yīng)等相關(guān)操作技巧,需要的朋友可以參考下2018-01-0110個(gè)避免Java內(nèi)存泄露的最佳實(shí)踐分享
即使有垃圾回收器的幫助,Java應(yīng)用程序仍然可能遭遇內(nèi)存泄漏問題,本文將介紹10個(gè)避免Java內(nèi)存泄漏的最佳實(shí)踐,大家可以根據(jù)需求自己進(jìn)行選擇2025-04-04Java數(shù)據(jù)結(jié)構(gòu)之鏈表、棧、隊(duì)列、樹的實(shí)現(xiàn)方法示例
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之鏈表、棧、隊(duì)列、樹的實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Java數(shù)據(jù)結(jié)構(gòu)中鏈表、棧、隊(duì)列、樹的功能、定義及使用方法,需要的朋友可以參考下2019-03-03Spring?JPA?deleteInBatch導(dǎo)致StackOverflow問題
這篇文章主要介紹了Spring?JPA?deleteInBatch導(dǎo)致StackOverflow問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05解決maven啟動(dòng)Spring項(xiàng)目報(bào)錯(cuò)的問題
下面小編就為大家分享一篇解決maven啟動(dòng)Spring項(xiàng)目報(bào)錯(cuò)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12