Получение специальных папок для работы в Apache Commons VFS - PullRequest
3 голосов
/ 24 ноября 2010

Библиотека Apache Commons VFS, по-видимому, не поддерживает специальные папки Windows (сеть, последние, компьютеры, библиотеки и т. Д.).

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

, а затем преобразует их в объекты FileObject следующим образом:

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 открывает пустую папку.

1 Ответ

1 голос
/ 06 января 2015

Реальная поддержка этих файлов отсутствует.Основная проблема заключается в том, что ни объект Java File не обрабатывает их корректно (new File("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}").toURI().toString() не может должным образом избежать двоеточий), ни Java или VFS не знают о :: как об абсолютном корне файловой системы.Поэтому вы не можете преобразовать их в URI (требуется для resolFile ()), который сохраняет специальные свойства, распознаваемые Windows.

...