2010-07-12 11 views
5

Ich arbeite derzeit an Java-Code, der Dateien in die Systemzwischenablage kopieren kann.Was ist der erforderliche DataFlavor zum Kopieren von Dateien in Mac OSX

Für Windows und Linux habe ich bereits funktioniert. Für OSX habe ich verschiedene Varianten ausprobiert, aber die Aktion "Einfügen" im Finder wurde nie aktiv.

Haben Sie eine Idee, welche DataFlavor Einstellungen für den Finder benötigt werden?

Gebrauchte Aromen:

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

Verfahren die Daten für den Geschmack zurückzukehren:

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

Danke, André

+0

Niemand eine Idee? –

Antwort

0

Vielleicht sollten Sie DataFlavor#javaFileListFlavor versuchen.

Auszug aus der API-Dokumentation:

DataFlavor # javaFileListFlavor (Link)

Um eine Liste von Dateien zu/von Java zu übertragen (und der zugrunde liegenden Plattform) eine DataFlavor dieses Typ/Subtyp und die Repräsentationsklasse von java.util.List wird verwendet. Jedes Element der Liste muss vom Typ java.io.File sein.
+0

übrigens ... das Ergebnis von 'System.out.println (DataFlavor.javaFileListFlavor.getMimeType());' ist 'application/x-java-datei-list; class = java.util.List' – headcr4sh

+0

Bitte beachten Sie meine Frage: javaFileListFlavor wird bereits behandelt. Der Finder verwendet diesen Geschmack nicht. –

+0

Oh ... das scheint ziemlich seltsam zu sein. – headcr4sh