Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java系统剪贴板可以复制文件吗?_Java_File_Clipboard - Fatal编程技术网

Java系统剪贴板可以复制文件吗?

Java系统剪贴板可以复制文件吗?,java,file,clipboard,Java,File,Clipboard,我使用Java系统剪贴板来传输文本和图像,但我想知道它是否可以复制和粘贴文件?如果是,我在哪里可以找到一些示例代码 我发现了一个类似的问题: 但是在它的任何地方我都找不到“剪贴板”这个词,我也不知道如何使用它 我用于复制图像的方法如下所示: public static void setClipboard(Image image) // This method writes a image to the sys

我使用Java系统剪贴板来传输文本和图像,但我想知道它是否可以复制和粘贴文件?如果是,我在哪里可以找到一些示例代码

我发现了一个类似的问题:

但是在它的任何地方我都找不到“剪贴板”这个词,我也不知道如何使用它

我用于复制图像的方法如下所示:

  public static void setClipboard(Image image)                                           // This method writes a image to the system clipboard : from exampledepot.com
  {
    ImageSelection imgSel=new ImageSelection(image);
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(imgSel,null);
  }

  public Image getImageFromClipboard()                                                   // Get an image off the system clipboard 
  {
    Transferable transferable=Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
    if (transferable!=null&&transferable.isDataFlavorSupported(DataFlavor.imageFlavor))
    {
      try { return (Image)transferable.getTransferData(DataFlavor.imageFlavor); }
      catch (UnsupportedFlavorException e) { e.printStackTrace(); }
      catch (IOException e) { e.printStackTrace(); }
    }
    else System.err.println("getImageFromClipboard: That wasn't an image!");
    return null;
  }

如何修改上述代码以传输文件?

基本上是的。您需要记住,拖放API和剪贴板API都使用了相同的
可转移
概念,它将数据包装到
DataFlavor
s中,因此您可以根据目标系统希望使用的风格以不同的方式转移数据

通常,在传输文件时,Java使用
Java.util.List
DataFlavor.javaFileListFlavor
。毫无疑问,没有很好的“包装器”类可用于此,因此您需要提供自己的,例如

import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Test {

    public static void main(String[] args) {
        File file = new File("/path/to/your/file");
        List listOfFiles = new ArrayList();
        listOfFiles.add(file);

        FileTransferable ft = new FileTransferable(listOfFiles);

        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ft, new ClipboardOwner() {
            @Override
            public void lostOwnership(Clipboard clipboard, Transferable contents) {
                System.out.println("Lost ownership");
            }
        });
    }

    public static class FileTransferable implements Transferable {

        private List listOfFiles;

        public FileTransferable(List listOfFiles) {
            this.listOfFiles = listOfFiles;
        }

        @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, IOException {
            return listOfFiles;
        }
    }

}

在我的测试中,我能够将
文件
放入
列表
,包装成可转移的
文件,将其传递到
剪贴板
,并能够通过系统粘贴文件(Windows资源管理器)

谢谢,回答得很好,但这只是我试图解决的问题的第一部分,请看我的下一个相关问题。我想知道是否可以用Java粘贴从剪贴板复制的文件?@我不确定你的意思-你是否要将文件从Java“复制”到系统剪贴板,然后通过类似资源管理器或其他方式粘贴-一般回答是“是”,您可以@АПППППППцццц当然演示了从剪贴板中获取
文件
列表的基本思想,一旦您拥有
文件
参考,您可以做任何您想做的事情