说到Windows,这个类WindowsAltFileSystemView
提出了一个基于FileSystemView的替代方案
这个类是必要的,因为 Windows NT 上有一个烦人的错误,在该错误中,JFileChooser
使用默认值实例化 a每次FileSystemView
都会导致 " " 错误。
我从 1.3 SDK 中获取了 Windows impl 并对其进行了修改,以便 * 不用于获取 fileSystem 根目录。drive A: not ready
FileSystemView
java.io.File.listRoots()
java.io.File.listRoots()
这样做会导致操作系统即使在没有磁盘的情况下也SecurityManager.checkRead()
尝试访问驱动器A:
abort, retry, ignore
,从而导致每次我们实例化 a 时都会出现烦人的“ ”弹出消息JFileChooser
!
所以在这里,想法是扩展FileSystemView
,将getRoots()
方法替换为:
/**
* Returns all root partitians on this system. On Windows, this
* will be the A: through Z: drives.
*/
public File[] getRoots() {
Vector rootsVector = new Vector();
// Create the A: drive whether it is mounted or not
FileSystemRoot floppy = new FileSystemRoot("A" + ":" + "\\");
rootsVector.addElement(floppy);
// Run through all possible mount points and check
// for their existance.
for (char c = 'C'; c <= 'Z'; c++) {
char device[] = {c, ':', '\\'};
String deviceName = new String(device);
File deviceFile = new FileSystemRoot(deviceName);
if (deviceFile != null && deviceFile.exists()) {
rootsVector.addElement(deviceFile);
}
}
File[] roots = new File[rootsVector.size()];
rootsVector.copyInto(roots);
return roots;
}