2010-11-24 15 views
3

Apache Commons VFSライブラリは、特別なWindowsフォルダ(ネットワーク、最近の、コンピュータ、ライブラリなど)をサポートできないようです。Apacheコモンズで特別なフォルダを使用する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}

のように、この作業を得ることに任意の助けをいただければ幸いです。これは、おそらくライブラリのバグのようです。うまくいけば、誰かがハックなどを知っていてうまく動作することを望むでしょう。

編集: 私は新しいショートカットに

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

+0

私はちょうどタイトルと質問自体の間の関係が何であるか分かりません。 Commons VFSのパッケージは、sun.awt.shellを使用している間はorg.apache.commons.vfsです。 – AlexR

+0

"どうやってそれを見つけましたか?" Googleでのハードコア検索:) "fileChooserComboBoxFolders"パラメータを送信する必要があることをどのように知っていましたか? Javaソースコード。 「タイトルと質問自体との関係は何か分かりません」 VFSに特別なファイルをサポートさせたいのですが、デフォルトではこれらの特別なファイルのパス名は扱えません。 – Zammbi

答えて

1

これらのファイルは実際にはサポートされていません。主な問題は、Javaファイルオブジェクトがそれらを正しく扱わず(new File("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}").toURI().toString()がコロンを正しくエスケープしない)、JavaまたはVFSが絶対ファイルシステムのルートとして知っていることではありません。したがって、Windowsで認識される特別なプロパティを保持するURI(resolveFile()によって必要)に変換することはできません。

+0

これはかなり古い問題です。これは、この分野のすべてを改善したJava 7の前でした。 私はJava 6を使って、これらのファイルをうまく処理できますが、VFSは決して扱えません。私はいくつかの領域では私のコードを使用し、他の領域ではVFSを使用しました。それはかなりハッキーだった:) – Zammbi

関連する問題