2010-07-12 4 views
5

현재 파일을 시스템 클립 보드에 복사 할 수있는 Java 코드로 작업하고 있습니다.Mac OSX에서 파일을 복사하는 데 필요한 DataFlavor는 무엇입니까

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

방법은 맛에 대한 데이터를 반환 :

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

감사합니다, 앙드레

+0

아무 아이디어도 없습니까? –

답변

0

은 아마 당신은 DataFlavor#javaFileListFlavor을 시도해야합니다. API 문서에서

발췌 :

의 DataFlavor # javaFileListFlavor (Link)

는 Java (및 기본이되는 플랫폼)이 타입/아류 형의 DataFlavor에/파일의리스트를 전송하려면, java.util.List의 표현 클래스가 사용됩니다. 리스트의 각 요소는, java.io.File 형이 될 필요가 있습니다.
+0

덧붙여서 ... System.out.println (DataFlavor.javaFileListFlavor.getMimeType());의 결과는'application/x-java-file-list; class = java.util.List' – headcr4sh

+0

내 질문보기 : javaFileListFlavor가 이미 처리되었습니다. Finder는이 맛을 사용하지 않습니다. –

+0

오 ... 그게 꽤 이상하게 보입니다. – headcr4sh

관련 문제