通过Java获取Windows硬盘的盘符;
已经通过Java成功获取了Windows所有磁盘的盘符,包括光驱和软驱,如下:File[] roots = File.listRoots();
for (int i = 0; i < roots.length; i++) {
    System.out.println(roots[i]);
}
问题(1):那么如何实现将光驱和软驱或其他类型的盘符筛选掉,只获取硬盘盘符呢?主要想实现获取Usb外接U盘的功能;
如果在调用Java程序后再插入U盘则可以根据盘符的变化(系统识别并增加U盘盘符),
并成功根据盘符变化取出U盘盘符;问题(2):那么如果在调用Java程序前就已经插入了U盘,怎么实现获取的盘符列表中哪个是U盘的盘符呢?

解决方案 »

  1.   

    import java.io.File;import javax.swing.filechooser.FileSystemView;public class ByteTest {    public static void main(String[] args) {
            FileSystemView sys = FileSystemView.getFileSystemView();
            File[] files = File.listRoots();
            for(int i = 0; i < files.length; i++) {
                System.out.println(files[i] + " -- " + sys.getSystemTypeDescription(files[i]));
            }
        }
    }我机器上的输出是:C:\ -- 本地磁盘
    D:\ -- 本地磁盘
    E:\ -- 本地磁盘
    F:\ -- 本地磁盘
    G:\ -- CD 驱动器
    J:\ -- 可移动磁盘
    K:\ -- CD 驱动器
      

  2.   

    按理说应该返回的是一个类型标识,就像 Windows API 中 GetDriveType(http://msdn.microsoft.com/zh-cn/library/aa364939%28v=VS.85%29.aspx) 返回的那些,但是在 Java 中我好像没有找到。FileSystemView#getSystemTypeDescription 方法只能将究着用用,如果要有更高的要求,只能通过 Windows API 和 JNI 去实现了。
      

  3.   

    我这里怎么输出错误了呢?我的电脑中有G盘的,是个光驱!C:\ -- 本地磁盘
    D:\ -- 本地磁盘
    E:\ -- 本地磁盘
    F:\ -- 本地磁盘
    FileSystemView.getShellFolder: f=G:\
    java.io.FileNotFoundException: File G:\ not found
    at sun.awt.shell.Win32ShellFolderManager2.createShellFolder(Unknown Source)
    at sun.awt.shell.Win32ShellFolderManager2.createShellFolder(Unknown Source)
    at sun.awt.shell.ShellFolder.getShellFolder(Unknown Source)
    at javax.swing.filechooser.FileSystemView.getShellFolder(Unknown Source)
    at javax.swing.filechooser.WindowsFileSystemView.getSystemTypeDescription(Unknown Source)
    at test.HardDriver.main(HardDriver.java:25)
    java.lang.NullPointerException
    at javax.swing.filechooser.WindowsFileSystemView.getSystemTypeDescription(Unknown Source)
    at test.HardDriver.main(HardDriver.java:25)
    Exception in thread "main" 
      

  4.   


    不是虚拟的,就是实实在在的一个DVD光驱,输出到G盘的时候就抛了,
    没办法调试javax的代码,不知道是啥问题!
      

  5.   

    查了一下FILE的源代码,的确,JAVA是用JNI拿的系统信息
     static private FileSystem fs = FileSystem.getFileSystem();
     public static native FileSystem getFileSystem();
    估计要拿完整的驱动器信息只有用JNI掉DLL了