使用Java如何将文本复制到剪贴板

 更新时间:2024年05月31日 09:19:52   作者:Fy哥  
这篇文章主要介绍了使用Java如何将文本复制到剪贴板问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Java将文本复制到剪贴板

关键代码

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

Clipboard类的2个主要方法:

setContents(Transferable contents, ClipboardOwner owner)
getContents(Object requestor)

Clipboard类:实现使用剪切/复制/粘贴操作传输数据的机制的类

代码示例(仅供参考)

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();
 
		//实现复制功能:将当前程序中的字符串复制到剪贴板中去
//		clipboard.setContents(canonicalNameSelection, null);
 
		canonicalNameSelection = clipboard.getContents(null);
		
		//获取剪贴板上的内容
		Object obj =  canonicalNameSelection.getTransferData(DataFlavor.stringFlavor);
 
		System.out.println(obj);
	}
}

java实现复制剪切粘贴(面向接口)

功能分析

  • 1.复制操作:用户选择要复制的文件路径,然后程序将复制的文件的文件路径存放到一个临时文件夹中。
  • 2.剪切操作:用户选择要剪切的文件路径,然后程序将剪切的文件的路径存放到一个临时文件夹中,再将原文件删除。复制和剪切都放在同一个临时文件夹中。
  • 3.粘贴操作:用户选择要粘贴的文件路径,然后程序会从临时文件中将用户文件写入用户要粘贴的文件夹中。如果该文件夹中有同名文件,则询问用户是否替换原文件或跳过该文件。
  • 4.进行复制剪切操作时要判断文件是否存在,存在才能进行此操作,否则提示用户文件不存在。

代码实现

1.主页面:

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("           复制粘贴剪切系统");
        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之外的内容
        char option;
        //do while循环,运行时先执行一遍再判断循环条件
        do{
            //由用户自主选择要进行的操作
            System.out.println("请选择你要执行的操作:");
            System.out.println("1.复制   2.剪切   3.粘贴   4.退出");
            //定义一个String类型接收用户输入的内容
            String myoption = scanner.next();
            //将用户输入的内容转换为char类型
            option = myoption.toCharArray()[0];
            //判断用户的选择,从而实现相对应的操作
            switch (option){
                case '1': operation.copy();break;  //复制操作
                case '2': operation.shear();break; //剪切操作
                case '3': operation.paste();break; //粘贴操作
                case '4': System.out.println("正在退出......");break;  //用户输入4则退出
                default:  System.out.println("你选择的功能编号不正确,请重新选择!");  //如果用户输入1-4之外的内容,则提示重新输入
            }
        }while (option != '4');
 
    }
}

2.功能实现页面:

import java.io.*;
import java.util.Locale;
import java.util.Scanner;
 
public class Operation implements Function{
    public Operation() {
    }
 
    //复制和剪切功能的写入操作
    @Override
    public void save(String path) throws Exception{
        //字符读取,这里的path是要复制和剪切的路径
        FileReader fileReader = new FileReader(path);
        //字符输出,复制和剪切后的路径都存在一个临时文件夹temp中
        FileWriter fileWriter = new FileWriter("F:\\javafile\\temp\\1.txt");
        BufferedReader bu_read = new BufferedReader(fileReader);
        BufferedWriter bu_write = new BufferedWriter(fileWriter);
        //定义变量line,接收每一行的数据
        String line;
        //判断文件中的每一行是否为空,不为空则继续循环,为空就是没有字符了,退出循环
        while ((line=bu_read.readLine())!=null){
            //写入
            bu_write.write(line);
            //换行
            bu_write.write("\n");
        }
        //关闭文件
        bu_read.close();
        bu_write.close();
    }
 
    //粘贴功能的写入操作
    @Override
    public void paste_file(String path) throws IOException {
        //字符读取,因为复制和粘贴后的文件路径都存放在了temp中,所以要将其内容粘贴,直接读取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,接收每一行的数据
        String line;
        //判断文件中的每一行是否为空,不为空则继续循环,为空就是没有字符了,退出循环
        while ((line=bu_read.readLine())!=null){
            //写入
            bu_write.write(line);
            //换行
            bu_write.write("\n");
        }
        //关闭文件
        bu_read.close();
        bu_write.close();
    }
 
    //复制文件操作
    @Override
    public void copy() throws Exception {
        Scanner scanner = new Scanner(System.in);
        //由用户选择复制的文件路径
        System.out.println("你要复制的文件路径:");
        String path = scanner.next();
        //定义myfile
        File myfile = new File(path);
        try{
            //判断文件是否在文件夹中存在,如果存在,则可以将这个文件复制下来
            myfile.exists();
            //调用复制和剪切功能的写入操作的这个函数
            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{
            //判断文件是否在文件夹中存在,如果存在,则可以将这个文件剪切下来
            myfile.exists();
            //调用复制和剪切功能的写入操作的这个函数
            this.save(path);
            //文件剪切之后,文件夹就没有这个文件了,所以进行删除操作,而剪切的文件路径已经存放进缓存了
            //注意:必须要先把文件关闭了才能删除文件
            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);
        //当我们将一个文件复制到一个文件夹中时,如果存在同名的文件,会进行询问  替换源文件还是跳过
        //所以判断,如果文件存在
        if(myfile.exists()){
            //弹出提示
            System.out.println("目标已包含一个名为" + myfile.getName() + "的文件");
            //用户选择替换原文件还是跳过
            System.out.println("替换目标中的文件(R)");
            System.out.println("跳过该文件(S)");
            //接收用户的选择
            String option = scanner.next().toUpperCase();
            switch (option) {
                case "R":
                    //用户选择R,则替换掉原来的文件,将新的内容写进文件
                    paste_file(path);
                    break;
                case "S":
                    //用户选择S,则跳过文件,新文件内容不写入文件中,直接break
                    break;
            }
        }else {
            //如果不存在同名的文件,则直接写入
            paste_file(path);
        }
 
    }
}

3.功能实现的接口:

import java.io.IOException;
 
public interface Function {
 
    //复制功能
    public void copy() throws Exception;
    //剪切功能
    public void shear() throws Exception;
    //复制和剪切功能的写入操作
    public void save(String path) throws Exception;
    //粘贴功能
    public void paste() throws Exception;
    //粘贴功能的写入操作
    public void paste_file(String path) throws IOException;
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • springmvc下实现登录验证码功能示例

    springmvc下实现登录验证码功能示例

    本篇文章主要介绍了springmvc下实现登录验证码功能示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • IntelliJ IDEA 2022.2.1最新永久激活破解教程(持续更新)

    IntelliJ IDEA 2022.2.1最新永久激活破解教程(持续更新)

    这篇文章主要介绍了IntelliJ IDEA 2022.2.1最新永久激活破解教程(持续更新),小编测试这种激活工具也适用idea2022以下所有版本,本篇教程整理的比较详细,汇总了idea各个版本的激活工具,激活方法多种多样,大家选择一种即可,感兴趣的朋友跟随小编一起看看吧
    2022-09-09
  • java中 == 与 equal 的区别讲解

    java中 == 与 equal 的区别讲解

    这篇文章介绍了java中 == 与 equal 的区别,有需要的朋友可以参考一下
    2013-10-10
  • 详解SpringBoot如何实现整合微信登录

    详解SpringBoot如何实现整合微信登录

    本文主要介绍了SpringBoot实现整合微信登录的过程详解,文中的示例代码介绍的非常详细,对我们的学习过工作有一定的参考价值,需要的朋友可以关注下
    2021-12-12
  • 深入剖析Java之String字符串

    深入剖析Java之String字符串

    这篇文章主要为大家详细介绍了Java之String字符串,重新带大家认识String字符串,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • protobuf与json转换小结

    protobuf与json转换小结

    protobuf对象不能直接使用jsonlib去转,因为protobuf生成的对象的get方法返回的类型有byte[],而只有String类型可以作为json的key,protobuf提供方法进行转换
    2017-07-07
  • Spring Boot集成Resilience4J实现限流/重试/隔离

    Spring Boot集成Resilience4J实现限流/重试/隔离

    在Java的微服务生态中,对于服务保护组件,像springcloud的Hystrix,springcloud alibaba的Sentinel,以及当Hystrix停更之后官方推荐使用的Resilience4j,所以本文给大家介绍了Spring Boot集成Resilience4J实现限流/重试/隔离,需要的朋友可以参考下
    2024-03-03
  • Mybatis-flex整合达梦数据库的实现示例

    Mybatis-flex整合达梦数据库的实现示例

    本文讨论了国产达梦数据库与Mybatis-flex框架的整合过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • 浅谈Java实现分布式事务的三种方案

    浅谈Java实现分布式事务的三种方案

    现在互联网下,分布式和微服务横行,难免会遇到分布式下的事务问题,当然微服务下可能没有分布式事务,但是很多场景是需要分布式事务的。下面就来介绍下什么是分布式事务和分布式事务的解决方案
    2021-06-06
  • Java从网络读取图片并保存至本地实例

    Java从网络读取图片并保存至本地实例

    这篇文章主要为大家详细介绍了Java从网络读取图片并保存至本地的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04

最新评论