我正在开发一个项目-桌面应用程序(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