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打开一个空文件夹。
答案 0 :(得分:1)
对这些文件没有真正的支持。主要问题是Java File对象都没有正确处理它们(new File("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}").toURI().toString()
没有正确地逃避冒号),Java或VFS也不知道::作为绝对文件系统根目录。因此,您无法将它们转换为URI(resolveFile()所需),以保持Windows识别的特殊属性。