在Mac OSX中复制文件所需的DataFlavor是什么

And*_*dré 5 java macos copy-paste

我目前正在研究可以将文件复制到系统剪贴板的Java代码.

对于Windows和Linux,我已经开始工作了.对于OSX,我尝试了几种口味,但Finder中的"粘贴"操作从未激活过.

知道Finder需要哪些DataFlavor设置?

二手口味:

DataFlavor.javaFileListFlavor
URILIST_FLAVOR = new DataFlavor( "text/uri-list" );
XFILELIST_FLAVOR = new DataFlavor( "application/x-java-file-list" );
GNOMEFILELIST_FLAVOR = new DataFlavor( "x-special/gnome-copied-files" );
Run Code Online (Sandbox Code Playgroud)

返回flavor的数据的方法:

public Object getTransferData( DataFlavor flavor ) throws UnsupportedFlavorException, IOException {
    if( FILELIST_FLAVOR.equals( flavor ) ) {
        if( List.class == flavor.getRepresentationClass() ) {
            return Arrays.asList( files );
        } else if( InputStream.class == flavor.getRepresentationClass() ) {
            return getStreamData( files, null );
        }
    } else if( DataFlavor.javaFileListFlavor.equals( flavor ) ) {
        if( List.class == flavor.getRepresentationClass() ) {
            return locallist;
        } else if( InputStream.class == flavor.getRepresentationClass() ) {
            return getStreamData( files, null );
        }
    } else if( URILIST_FLAVOR.equals( flavor ) ) {
        if( List.class == flavor.getRepresentationClass() ) {
            return Arrays.asList( files );
        } else if( InputStream.class == flavor.getRepresentationClass() ) {
            return getStreamData( files, null );
        }
    } else if( GNOMEFILELIST_FLAVOR.equals( flavor ) ) {
        if( List.class == flavor.getRepresentationClass() ) {
            return Arrays.asList( files );
        } else if( InputStream.class == flavor.getRepresentationClass() ) {
            // FIXME support cut and copy
            return getStreamData( files, "copy" );
        }
    } else if( XFILELIST_FLAVOR.equals( flavor ) ) {
        if( List.class == flavor.getRepresentationClass() ) {
            return locallist;
        } else if( InputStream.class == flavor.getRepresentationClass() ) {
            return getStreamData( files, null );
        }
    }
    throw new UnsupportedFlavorException( flavor );
}
Run Code Online (Sandbox Code Playgroud)

谢谢,安德烈

小智 0

也许你应该尝试DataFlavor#javaFileListFlavor

API 文档摘录:

DataFlavor#javaFileListFlavor链接

为了将文件列表传输到 Java(以及底层平台)或从 Java(以及底层平台)传输文件列表,需要使用此类型/子类型的 DataFlavor 和 java.util.List 的表示类。列表中的每个元素都需要/保证为 java.io.File 类型。