2012-10-16 135 views
5

我使用Java中的File.listRoots()列出了桌面中的所有可用驱动器。我有一些Mapped驱动器。当我列出根源时,它将获取本地驱动器以及映射的驱动器。为了排除我使用的映射驱动器以下代码片段:从本地驱动器识别映射驱动器

for (File drive :File.listRoots()){ 
    String typeDescription = FileSystemView.getFileSystemView().getSystemTypeDescription(drive); 
} 

根据返回的类型描述,我正在过滤驱动器。但这不是普遍标准,也不被其他操作系统所接受。仅支持Windows。此外还有一个语言限制(英文仅支持类型描述)。任何人都可以给我任何其他解决方案来全局过滤映射驱动器。

注:
它必须是具体到JDK1.6

+1

其他任何解决方案都是平台特定的。但是,因为_All available drives_是一个纯粹的Windows术语,您可能正在寻找windows only解决方案? –

+0

@ Oleg Mikheev。是的..我正在寻找解决方案在windows.But在Linux机器File.listRoots()只返回根目录。所以在Linux中没有问题。我需要区分映射的驱动器和本地驱动器在Windows平台... –

+0

删除我的答案。我只是在OS X上试过,我发现你遇到的问题。如果我想到任何东西,我会发布另一个答案。 – Dave

回答

1

如果你的问题是只能在Windows,为什么不使用:

if (System.getProperty("os.name").contains("Windows"))

你可以写一个C++程序做(人)语言独立使用IVdsDisk::GetProperties,然后导入它在Java中的native功能(并告诉VM只尝试运行native方法,如果您正在运行Windows 。看到

MSDN link to get you started

检查VDS_DISK_PROP.dwMediaTypeFILE_DEVICE_NETWORKFILE_DEVICE_NETWORK_FILE_SYSTEM你可以看到这里的所有受支持的类型:winioctrl.h

这个值可以通过Java访问,但是Java通常没有特定于平台的东西,所以我对此表示怀疑。

+0

@ durron597 ..我可以使用上面提到的代码段来区分操作系统..但是想想这个场景,当我安装了除英语以外的其他语言的Windows操作系统时,我无法使用“类型描述”来区分映射的驱动器和本地驱动器。如果我想通过“类型描述”区分它们,我必须在从本地驱动器识别地图驱动器之前检查OS语言。这可能会导致在Windows操作系统中发现许多语言的条件检查。 –

+0

@vigneshkumarrathakumar:我更新了这篇文章,可能对您有所帮助! – durron597