3

Apache Commons VFS ライブラリは、特別な Windows フォルダー (ネットワーク、最近使用したフォルダー、コンピューター、ライブラリーなど) をサポートできないようです。

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 では空のフォルダーが開きます。

4

1 に答える 1

1

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

于 2015-01-05T23:58:47.963 に答える