我正在开发一个项目-桌面应用程序(Java,Swing),该应用程序需要将FTP文件的链接复制到系统剪贴板中,以便用户能够将这些文件粘贴到资源管理器中。

我在mime-type text/uri-list和表示形式类java.lang.String中使用数据风格。我将FTP文件的链接放置到剪贴板,但是Windows不想将其粘贴到资源管理器中。

尝试将链接复制到剪贴板的代码如下所示:

public static void main(String[] args) throws Exception{

    final DataFlavor dataFlavor = new DataFlavor("text/uri-list; class=java.lang.String");
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    clipboard.setContents(new Transferable() {
        @Override
        public DataFlavor[] getTransferDataFlavors() {
            return new DataFlavor[]{dataFlavor};
        }

        @Override
        public boolean isDataFlavorSupported(DataFlavor flavor) {
            return dataFlavor.equals(flavor);
        }

        @Override
        public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
            if (dataFlavor.equals(flavor)){
                return "ftp://127.0.0.1:2323/folder/file.txt";
            }
            return null;
        }
    }, new ClipboardOwner() {
        @Override
        public void lostOwnership(Clipboard clipboard, Transferable contents) {
            System.out. println("Lost clipboard owner");
        }
    });
 }


我还尝试使用其他表示形式类(InputStream,字节数组和char数组)。据我了解,我需要在剪贴板上放置一个java.util.list列表,并使用dataflavor DataFlavor.javaFileListFlavor,但是我不知道如何将FTP链接转换为文件。

在剪贴板中放置FTP链接的正确方法是什么?

最佳答案

据我所知,在Windows中没有特殊的URI剪贴板内容。只需将URI复制为普通的String

Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection s=new StringSelection("ftp://127.0.0.1:2323/folder/file.txt");
clipboard.setContents(s, s);


如果要创建桌面快捷方式文件,只需要创建后缀为.URL的纯文本文件,并向其中写入以下内容:

[InternetShortcut]
URL=ftp://127.0.0.1:2323/folder/file.txt

07-25 21:34