2012-10-16 169 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