2010-11-24 103 views
3

Apache Commons VFS庫似乎無法支持特殊的Windows文件夾(網絡,近期,計算機,庫等)。獲取特殊文件夾在Apache Commons中工作VFS

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

,然後將它們轉換爲FileObjects像這樣:

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

它只是不工作,你得到的是它的名字的路徑名。

這些文件的路徑就像::{20D04FE0-3AEA-1069-A2D8-08002B30309D}

在得到這個工作的任何幫助,將不勝感激。它看起來很可能是庫中的一個bug。希望有人知道黑客或這樣的工作。

編輯: 我相信我是近身的時候我創建新的快捷方式

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」?我很抱歉,我正在問一個問題,而不是給你一個答案。我沒有答案,但這個問題對我來說很有意思。 – AlexR 2010-11-24 07:48:43

+0

我只是不明白標題和問題本身之間的關係。當您使用sun.awt.shell時,Commons VFS的軟件包是org.apache.commons.vfs。 – AlexR 2010-11-24 07:55:59

回答

1

這些文件沒有真正的支持。主要問題是Java File對象不能正確對待它們(new File("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}").toURI().toString()不能正確地轉義冒號),Java或VFS也不知道::作爲絕對文件系統根。所以你不能將它們轉換成一個URI(resolveFile()所要求的),它保持Windows識別的特殊屬性。

相關問題