java剪切txt文件_用Java把剪切板的內容實時保存到txt

test類:提示用戶程序已啟動,提示保存位置,清空剪切板。

package com.ariya.service;

import com.ariya.service.impl.ClipboardServiceImpl;

/**

* @author Ariya

* 程序入口

*/

public class Test {

public static void main(String[] args) {

ClipboardServiceImpl clipboardService =new ClipboardServiceImpl();

System.out.println("程序已啟動:》》》》》》》》");

System.out.println("請開始復制:》》》》》》》》");

System.out.println("默認保存位置C:/doc");

clipboardService.setClipboardText("");

clipboardService.save2txt(null);

}

}

接口類:

package com.ariya.service;

/**

* @author Ariya

*/

public interface IClipboardService {

/**

* 按入參地址保存到txt文件

* @param filePath

*/

void save2txt(String filePath);

/**

* 把剪切板的內容返回

* @return String

*/

StringgetClipboardText();

/**

* 向剪切板寫東西

* @param text

*/

void setClipboardText(String text);

}

實現類:

package com.ariya.service.impl;

import com.ariya.service.IClipboardService;

import org.apache.commons.lang3.StringUtils;

import java.awt.*;

import java.awt.datatransfer.Clipboard;

import java.awt.datatransfer.DataFlavor;

import java.awt.datatransfer.StringSelection;

import java.awt.datatransfer.Transferable;

import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStreamWriter;

/**

* @author Ariya

*/

public class ClipboardServiceImplimplements IClipboardService {

StringoldText =null;

StringnewText =null;

@Override

public void save2txt(String path) {

String filePath =null;

if(StringUtils.isEmpty(path) || path =="1") {

path ="C:/doc";

File file =new File(path);

if(!file.exists()) {

file.mkdir();

}

}

filePath = path +"/text.txt";

//持續讀取

while(true) {

String clipboardText = getClipboardText();

//讀到就寫

if(!StringUtils.isEmpty(clipboardText)) {

String charsetName ="UTF-8";

try (OutputStreamWriter osw =new OutputStreamWriter(new FileOutputStream(filePath, true), charsetName)) {

//寫操作

osw.write(clipboardText);

osw.write("\n");

osw.flush();

System.out.println("("+ clipboardText +")>>>“存盤成功");

}catch (Exception e) {

e.printStackTrace();

}

}

//睡眠0.2秒

try {

Thread.sleep(200);

}catch (InterruptedException e) {

e.printStackTrace();

}

}

}

@Override

public StringgetClipboardText() {

//獲取剪切板對象

Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

//獲取剪切板中的可轉換對象

Transferable transferable =null;

try {

//這里很容易拋各種異常

transferable = clipboard.getContents(null);

}catch (IllegalArgumentException e) {

System.out.println("無法復制保存該內容");

setClipboardText("");

return null;

}catch (Exception e) {

System.out.println("系統錯誤");

setClipboardText("");

}

//如果可轉換對象不是null

if (transferable !=null) {

// 檢查內容是否是文本類型

if (transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) {

try {

//把文本類型可轉對象直接轉換為string

newText = (String) transferable.getTransferData(DataFlavor.stringFlavor);

//如果和之前的相等,直接return

if(newText.equals(oldText)) {

return null;

}

//否則就把新字符串賦值給老字符串,然后return出去

oldText =newText;

return newText;

}catch (Exception e) {

e.printStackTrace();

}

}

}

return null;

}

@Override

public void setClipboardText(String text) {

//獲取剪切板對象

Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

//實例化可轉換對象

Transferable transferable =new StringSelection(text);

//往剪切板寫入可轉換對象

clipboard.setContents(transferable, null);

}

}

pom文件:主要是用于打包jar,實現jar的自啟動

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.ariya

clipboard-copy

1.0-SNAPSHOT

org.apache.commons

commons-lang3

3.11

org.apache.maven.plugins

maven-compiler-plugin

1.8

1.8

org.springframework.boot

spring-boot-maven-plugin

com.ariya.service.Test

JAR

true

repackage

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287441.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287441.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287441.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【三維激光掃描】第一章:三維激光掃描入門基礎知識

隨著地理空間信息服務產業的快速發展,地理空間數據的要求越來越高。對地理空間數據的要求正朝著大信息量、高精度、可視化和可挖掘方向發展。地面激光雷達技術是一門新興的測繪技術,已逐漸成為廣大科研和工程技術人員全新的解決問題的手段。地面三維激光掃描技術與全站儀測量…

Android之kotlin里面本地圖片BitmapFactory.decodeFile轉bitmap失敗問題

1 問題 我們手機本地有個圖片文件比如如下 /storage/emulated/0/Android/data/package_name/cache/1586444511539.png 我們需要png轉bitmap,然后設置到ImageView里面顯示 var bitmap BitmapFactory.decodeFile(imagePath);if (bitmap null) returnelse mImagevi…

3、面向對象-繼承-多態

1、繼承子類可以繼承父類的一切,一個子類只能有一個父類,一個父類可以有多個子類//父類class Ren{public $name;public $sex;public $yuyan;function Say() {echo $this->name."正在講話!";}}//美國人的子類class America ex…

整理iOS9適配中出現的坑

一、NSAppTransportSecurity iOS9讓所有的HTTP默認使用了HTTPS,原來的HTTP協議傳輸都改成TLS1.2協議進行傳輸。直接造成的情況就是App發請求的時候彈出網絡無法連接。解決辦法就是在項目的info.plist 文件里加上如下節點: NSAppTransportSecurity - NSAl…

由c# dynamic是否裝箱引發的思考

前言前幾天在技術群里看到有同學在討論關于dynamic是否會存在裝箱拆箱的問題,我當時第一想法是"會"。至于為啥會有很多人有這種疑問,主要是因為覺得dynamic可能是因為有點特殊,因為它被稱為動態類型,可能是因為這里的動態對大家造成的誤解,認為…

【看動漫學編程】程序員在異世界生個娃 第3篇:搞不好我就是個王者

前言 作者文筆比較水,還請見諒。 以下內容還將使用視頻動態漫畫表現,剪輯完將會貼出鏈接。 小說劇情為劇情需要,過渡到知識點,部分篇幅可能沒有技術知識點還望諒解。 由于沒有經費支持,所以畫出來的東西是我自己用代碼…

PHP會話控制考察點

為什么要使用會話控制技術 HTTP協議是無狀態的,也就是說HTTP沒有一個內建的機制來維護兩個事務之間的狀態。當一個用戶完成一個請求發起第二個請求的時候,服務器無法知道這次請求是來自于上一次的客戶。而用戶登錄、購物車等,這些是需要服務器…

數據庫SQL語句學習筆記(6)-使用函數處理數據

1.SQL也可以用函數來處理數據,函數一般是在數據上執行的,為數據的轉換和處理提供了方便。但是每一個數據庫管理系統(DBMS)都有特定的函數,事實上,只有少數幾個函數被所有的DBMS等同地支持。例如&#xff0c…

java3n 1_1005 繼續(3n+1)猜想(JAVA)

卡拉茲(Callatz)猜想已經在1001中給出了描述。在這個題目里,情況稍微有些復雜。當我們驗證卡拉茲猜想的時候,為了避免重復計算,可以記錄下遞推過程中遇到的每一個數。例如對 n3 進行驗證的時候,我們需要計算 3、5、8、4、2、1&…

【遙感物候】Matlab求解一元六次多項式,計算植被生長季始期

一元六次多項式能很好的逼近濾波后的曲線,與二次多項式相比,在擬合植被整個生長季曲線方面有更好的優勢,該方法常用來描述北方溫帶和高緯度地區時序NDVI生長季模式。因此,本文使用一元六次多項式來擬合植被整個生長季曲線,效果很好。那么擬合后,這樣解方程呢求生長季參數…

Android之給控件添加水紋波效果

1 問題 給控件添加水紋波效果,點擊起來像點中了,不然效果太粗糙了,沒反應。 2 實現 給控件添加如下屬性 android:background"?android:attr/selectableItemBackground"波紋有邊界 android:background"?android:attr/sele…

《看聊天記錄都學不會C語言?太菜了吧》(1)我在大佬群里問基礎問題沒人理?

若是大一學子或者是真心想學習的小伙伴可以私聊我,若你是真心學習可以送你書籍,指導你學習,給予你目標方向的學習路線,無套路,博客為證。 本系列文章將會以通俗易懂的對話方式進行教學,對話中將涵蓋了新手…

個人博客作業_week2

1. 是否需要有代碼規范 1.這些規范都是官僚制度下產生的浪費大家的編程時間、影響人們開發效率,浪費時間的東西。 我不同意這個論點。 有句俗語’無規矩不成方圓‘,這亙古傳承的至理同樣適用于寫代碼。制定代碼撰寫規范并不是 迫于壓力完成上級的任務&am…

最全面透徹的RabbitMQ指南

概念RabbitMQ是實現了高級消息隊列協議(AMQP)的開源消息代理軟件(亦稱面向消息的中間件)。RabbitMQ服務器是用Erlang語言編寫的,而集群和故障轉移是構建在開放電信平臺框架上的。所有主要的編程語言均有與代理接口通訊…

TensorFlow中RNN實現的正確打開方式

上周寫的文章《完全圖解RNN、RNN變體、Seq2Seq、Attention機制》介紹了一下RNN的幾種結構,今天就來聊一聊如何在TensorFlow中實現這些結構,這篇文章的主要內容為: 一個完整的、循序漸進的學習TensorFlow中RNN實現的方法。這個學習路徑的曲線較…

【遙感物候】Hants NDVI時間序列諧波分析法數據重構,植被生長季曲線效果可佳(附Hants軟件下載)

NDVI時間序列諧波分析法(Harmonic Analysis of NDVI Time-Series)(簡稱Hants )對時間序列數據進行平滑。該方法是一種新的物候分析方法,可用于定量化的監測植被動態變化。其核心算法是傅里葉變換和最小二乘法擬合, 即把時間波譜數據分解成許多不同頻率的正弦曲線和余弦曲線,…

Android之在Java socket作為服務器里面返回數據頭部怎么寫入瀏覽器需要下載文件的文件名

1 問題 Android app里面寫了一個Java socket的簡單服務器,在瀏覽器里面輸入相應的IP和端口訪問服務器下載文件,Java socket怎么寫返回數據的頭部信息,瀏覽器才知道需要下載文件的名字呢? 2 關于Content-Disposition 在常規的HTTP應答中,Content-Disposition 響應頭指示回…

java中hasnext的作用_java中Scanner的hasNext()的疑問

第一個問題,兩段代碼的區別在于阻塞的位置不同,加上一行輸出代碼就可以很明顯地看到差別。Test.javaimport java.util.Scanner;public class Test {public static void main(String[] args) {Scanner s new Scanner(System.in);while(s.hasNext()){Syst…

《看聊天記錄都學不會C語言?太菜了吧》(2)我說編程很容易你們不服?

若是大一學子或者是真心想學習剛入門的小伙伴可以私聊我,若你是真心學習可以送你書籍,指導你學習,給予你目標方向的學習路線,無套路,博客為證。 本系列文章將會以通俗易懂的對話方式進行教學,對話中將涵蓋…

ABAP的自學之路 ,初步認識ABAP 一

由于工作的關系,最近需要對SAP系統進行二次開發,于是開始學習ABAP。鑒于網上對于ABAP的資料少之又少,所以自己整理一些資料。 第一章 ABAP 開發環境和總體介紹1.1 ABAP 開發環境ABAP 開發的三種環境:(1)SAP…