2012-10-16 10 views
5

Mam listę wszystkich dostępnych dysków na moim pulpicie przy użyciu File.listRoots() w Javie. Mam kilka mapowanych dysków. Kiedy wyświetlam listę katalogów głównych, pobierają mnie zarówno dyski lokalne, jak i zmapowane dyski. W celu wykluczenia odwzorowanych napędów Kiedyś po fragmencie kodu:Identyfikowanie dysku mapowanego z dysku lokalnego

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

Na podstawie opisu typu powrócił jestem filtrowanie napęd. Ale nie jest to powszechnie standard i nie do zaakceptowania przez inny system operacyjny. Obsługiwany tylko dla okien. Istnieje również ograniczenie języka (w języku angielskim obsługiwane jest tylko opis typu). Czy ktoś może mi dać inne rozwiązanie do filtrowania zmapowanych dysków na całym świecie.

Uwaga:
To musi być specyficzny dla JDK1.6

+1

Każde inne rozwiązanie będzie zależało od platformy. Ale ponieważ _Wszystkie dostępne dyski_ są wyłącznie terminem Windows, który prawdopodobnie szukasz rozwiązania tylko dla systemu Windows? –

+0

@Oleg Mikheev. Tak ... Szukam tylko rozwiązania w oknach. Ale w maszynie linuksowej File.listRoots() zwraca tylko katalog główny. Więc nie ma problemu w Linuksie. Potrzebuję rozróżnić między zmapowanym dyskiem i dyskiem lokalnym w platformie Windows ... –

+0

Usunięto moją odpowiedź. Po prostu wypróbowałem to na OS X i widzę problem, który masz. Napiszę inną odpowiedź, jeśli coś wymyślę. – Dave

Odpowiedz

1

Jeśli problem jest tylko w systemie Windows, dlaczego nie użyć:

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

Można napisać C++ programu to zrobić (ludzkie) język niezależnie korzystając IVdsDisk::GetProperties, a następnie zaimportować go jako native funkcji w Java (i powiedzieć VM tylko spróbować uruchomić metodę native jeśli używasz systemu Windows .

MSDN link to get you started

Sprawdź, czy VDS_DISK_PROP.dwMediaType jest FILE_DEVICE_NETWORK lub FILE_DEVICE_NETWORK_FILE_SYSTEM można zobaczyć wszystkie obsługiwane typy tutaj:. winioctrl.h

Jest możliwe, że wartość jest dostępna w Javie, ale Java zazwyczaj nie ma konkretnych platform, więc wątpię.

+0

@ durron597 .. Potrafię odróżnić system operacyjny za pomocą fragmentu kodu, o którym wspomniałeś powyżej. Ale pomyśl o tym scenariuszu, gdy zainstalowałem system operacyjny Windows w innym języku niż angielski Nie mogę użyć "opisu typu", aby odróżnić zmapowane dyski i dyski lokalne. Jeśli chcę je rozróżnić poprzez "opis typu", muszę sprawdzić język OS przed rozpoznaniem dysku map z dysku lokalnego. Może to prowadzić do liczby warunkowych sprawdzeń tak wielu języków, jakie można znaleźć w systemie Windows. –

+0

@vigneshkumarrathakumar: Zaktualizowałem post, który może ci pomóc! – durron597