2010-11-24 4 views
3

Apache Commons VFS 라이브러리는 특별한 Windows 폴더 (네트워크, 최근 컴퓨터, 라이브러리 등)를 지원하지 못하는 것 같습니다. 과 같이 FileObjects로 변환Apache Commons에서 특수 폴더 가져 오기 VFS

File[] cbFolders = (File[])sun.awt.shell.ShellFolder.get("fileChooserComboBoxFolders"); 

다음 :

for(File f: cbFolders){ 
    fileObjArray.add(mgr.resolveFile(f.getPath())); 
} 

그냥 작동하지 않고 당신이 얻을 모든 이름에 대한 경로 이름입니다. 이러한 파일의

경로는 ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}

같이이 작업을 얻기에 어떤 도움을 주시면 감사하겠습니다 있습니다. 가장 가능성이있는 라이브러리 버그입니다. 바라기를 누군가는 해킹 등을 잘 알고 있기 때문에 잘 작동합니다.

편집 : 는 내가 새로운 바로 가기

try{ 
    final File[] cbFolders = (File[])sun.awt.shell.ShellFolder.get("fileChooserComboBoxFolders"); 

    String name = ""; 

    File[] systemFiles = new File[cbFolders.length]; 
    i =0; 
    for(File f: cbFolders){ 
     name = f.getName(); 
     if(name.startsWith("::{")){ 
      name = name.substring(2); 
      System.out.println("converting: " + name); 
      String fileName = fileSystemView.getSystemDisplayName(f); 

      File file = new File("C:\\Users\\Daniel\\Desktop\\" + fileName + "." + name); 

      boolean success = false; 
      success = file.mkdir(); //returns false even if it works, 

      systemFiles[i] = file; 
     }else 
      systemFiles[i] = f; 
     i++; 
    } 

    list = new ArrayList<File>(Arrays.asList(systemFiles)); 
}catch(final Exception e){ 
    ... 
} 

올바른 아이콘과 이름이 표시 Windows 탐색기에서 제대로 열리지 만 아직 VFS와는 빈 폴더를 엽니을 만들 때 나는 가까이 생각합니다.

+0

와우! 나는 ShellFolder 클래스를 사용한 적이 없다. 어떻게 찾았 니? "fileChooserComboBoxFolders"매개 변수를 보내야한다는 것을 어떻게 알았습니까? 나는 당신에게 대답을주는 대신에 questing을 요청하고있어 유감입니다. 나는 대답이 없지만 문제는 나에게 흥미 롭다. – AlexR

+0

제목과 질문 자체의 관계를 이해하지 못했습니다. Commons VFS '패키지는 sun.awt.shell을 사용하는 동안 org.apache.commons.vfs입니다. – AlexR

+0

"어떻게 찾았습니까?" Google에서 하드 코어 검색 :) "fileChooserComboBoxFolders"매개 변수를 보내야한다는 것을 어떻게 알았습니까? " 자바 소스 코드. "나는 제목과 질문 자체 사이의 관계가 무엇인지 이해하지 못한다." VFS에서 특수 파일을 지원하도록 설정하려면 기본적으로 특수 파일의 경로 이름을 처리 할 수 ​​없습니다. – Zammbi

답변

1

해당 파일에 대한 실제적인 지원은 없습니다. 가장 큰 문제점은 Java File 객체가 올바르게 처리하지 못하기 때문에 (new File("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}").toURI().toString()이 콜론을 올바르게 벗어나지 않음) Java 또는 VFS가 절대 파일 시스템 루트로 알고 있다는 점입니다. 따라서 Windows에서 인식되는 특수 속성을 유지하는 URI (resolveFile()이 필요함)로 변환 할 수 없습니다.

+0

이것은 꽤 오래된 질문입니다. 이것은이 영역의 모든 것을 개선 한 Java 7 이전이었습니다. Java 6에서 파일을 잘 처리 할 수는 있지만 VFS는 절대 사용할 수 없습니다. 일부 지역에서는 코드를, 다른 곳에서는 VFS를 사용했습니다. 그것은 아주 해키했다 :) – Zammbi

관련 문제