Java复制到粘贴板的代码

Eave 2017.05.04
package com.wizardaws.tools.application;

import com.wizardaws.tools.image.Images;
import com.wizardaws.tools.utils.ListUtil;

import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.List;

public class Copyboard
{
    public static void main(String[] args) throws Exception
    {
        // 获取系统剪贴板
        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

        // 复制文本到剪贴板
        Transferable transferable0 = new StringSelection("Qian");
        clipboard.setContents(transferable0, null);

        // 复制图片到剪贴板
        Transferable transferable1 = new ImageTransferable(Images.load("E:\\Pictures\\20240601210157.png"));
        clipboard.setContents(transferable1, null);

        // 复制文件到剪贴板
        Transferable transferable2 = new FileTransferable(ListUtil.newArrayList(new File("E:\\Pictures\\20240601210157.png")));
        clipboard.setContents(transferable2, null);


        // 粘贴板上的数据是文字
        if(clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor))
        {
            String content = (String) clipboard.getData(DataFlavor.stringFlavor);
            System.out.println(content);
        }
        // 粘贴板上的数据是图片
        else if(clipboard.isDataFlavorAvailable(DataFlavor.imageFlavor))
        {
            BufferedImage image = (BufferedImage) clipboard.getData(DataFlavor.imageFlavor);
            Images.save(image, "D:\\124.png");
            System.out.println(image.getType());
        }
        // 粘贴板上的数据是文件
        else if(clipboard.isDataFlavorAvailable(DataFlavor.javaFileListFlavor))
        {
            // 获取文件列表
            List files = (List) clipboard.getData(DataFlavor.javaFileListFlavor);
            // 遍历文件列表,并保存每个文件到磁盘
            for(File file : files)
            {
                System.out.println(file.getName() + "=>" + file.length()); // 指定保存路径和文件名
            }
        }
    }
}

支持复制图片到剪切板的代码实现:ImageTransferable.java

package com.wizardaws.tools.application;

import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.image.BufferedImage;

public class ImageTransferable implements Transferable
{
    private BufferedImage image;

    public ImageTransferable(BufferedImage image)
    {
        this.image = image;
    }

    @Override
    public DataFlavor[] getTransferDataFlavors()
    {
        return new DataFlavor[]{DataFlavor.imageFlavor}; // 返回图像数据的格式
    }

    @Override
    public boolean isDataFlavorSupported(DataFlavor flavor)
    {
        return DataFlavor.imageFlavor.equals(flavor); // 判断是否支持图像格式
    }

    @Override
    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException
    {
        if(!isDataFlavorSupported(flavor))
        {
            throw new UnsupportedFlavorException(flavor);
        }

        return image; // 返回图像数据
    }
}

支持复制文件到剪切板的代码实现:FileTransferable.java

package com.wizardaws.tools.application;

import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.File;
import java.util.List;

public class FileTransferable implements Transferable
{
    private List<File> files;

    public FileTransferable(List<File> files)
    {
        this.files = files;
    }

    @Override
    public DataFlavor[] getTransferDataFlavors()
    {
        return new DataFlavor[]{DataFlavor.javaFileListFlavor}; // 返回文件数据的格式
    }

    @Override
    public boolean isDataFlavorSupported(DataFlavor flavor)
    {
        return DataFlavor.javaFileListFlavor.equals(flavor); // 判断是否支持文件格式
    }

    @Override
    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException
    {
        if(!isDataFlavorSupported(flavor))
        {
            throw new UnsupportedFlavorException(flavor);
        }

        return files; // 返回文件数据
    }
}