日期:2014-05-20  浏览次数:20857 次

关于JAVA获取Windows系统盘符的问题
通过Java获取Windows硬盘的盘符;
已经通过Java成功获取了Windows所有磁盘的盘符,包括光驱和软驱,如下:
Java code

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盘的盘符呢?

------解决方案--------------------
Java code
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]));
        }
    }
}

------解决方案--------------------
按理说应该返回的是一个类型标识,就像 Windows API 中 GetDriveType(http://msdn.microsoft.com/zh-cn/library/aa364939%28v=VS.85%29.aspx) 返回的那些,但是在 Java 中我好像没有找到。

FileSystemView#getSystemTypeDescription 方法只能将究着用用,如果要有更高的要求,只能通过 Windows API 和 JNI 去实现了。


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