2010-07-12 10 views
5

Actualmente estoy trabajando en código Java que puede copiar archivos en el portapapeles del sistema.¿Cuál es el DataFlavor requerido para copiar archivos en Mac OSX

Para Windows y Linux ya lo tengo funcionando. Para OSX probé varios sabores pero la acción "Pegar" en Finder nunca aparece activa.

¿Alguna idea de qué configuración de DataFlavor se requiere para Finder?

sabores utilizadas:

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"); 

El método para devolver los datos para el sabor:

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); 
} 

, gracias, André

+0

¿Ninguna otra idea? –

Respuesta

0

tal vez debería tratar DataFlavor#javaFileListFlavor.

Extracto de la documentación de la API:

DataFlavor # javaFileListFlavor (Link)

Para transferir una lista de archivos a/desde Java (y la plataforma subyacente) un DataFlavor de este tipo/subtipo y se usa la clase de representación de java.util.List. Se requiere/garantiza que cada elemento de la lista sea de tipo java.io.File.
+0

por cierto ... el resultado de 'System.out.println (DataFlavor.javaFileListFlavor.getMimeType());' es 'application/x-java-file-list; class = java.util.List' – headcr4sh

+0

Consulte mi pregunta: javaFileListFlavor ya se ha procesado. El Buscador no usa este sabor. –

+0

Oh ... eso parece bastante extraño, de hecho. – headcr4sh