2010-09-30 12 views
8

La storia dietro ...scoperta Java

mi piace molto show televisivi, ma torno a casa solo due volte al mese. Per il resto del tempo vivo in una casa senza internet (vicino alla mia università, quindi, free wifi rocks! - quando funziona -) quindi avevo bisogno di un piccolo software in grado di aggiornare il mio hard disk portatile con i miei nuovi programmi quando torno a casa dove il file server sincronizzato con i podcast fa il suo lavoro. L'ho fatto usando Java e funziona.

Il problema

In questo momento ho un .properties file in cui sono memorizzate le directory montata di quella hd usb. Non abbastanza. Voglio che il software sia in grado di scoprire tutti i dispositivi di archiviazione di massa USB e consentire all'utente di selezionare quale utilizzare per archiviare i file. Come lo posso fare?

dettagli

a) deve essere in Java (voglio dire, potrebbe funzionare anche con l'esecuzione di comandi locali ospitanti come dir o qualcosa di simile)

b) il mio server è su Windows, ma lo preferisco essere una soluzione indipendente OS

+0

Non sono sicuro che Java possa accedere a tali dettagli di FS - è abbastanza complicato in codice nativo =/Mi piacerebbe saperlo, quindi vediamo se qualcuno lo sa. – Piskvor

+0

Beh, so con certezza in C# che hai un 'System.IO.DriveInfo'. Spero ci sia qualcosa di simile con Java. – dierre

+0

a) deve essere Java? b) quale sistema operativo? –

risposta

3

Mentre io non l'ho visto nella sua interrogazione, presumo sei molto familiare con File.listRoots() metodo che restituisce un array di bene, di file radici .

Quindi, è possibile semplicemente iterare su di loro e provare a identificare se si tratta di unità flash. Alcuni hack possono essere:

File[] roots = File.listRoots(); 

if (roots == null) { 
    // you have a different problem here. Is it even a computer we are talking about? 
} 

// Iterate through roots 
for (File root : roots) { 
    if (root.canWrite()) { // Or, you could use File.createTempfile with that folder 
     // if root does not contain some well know files 
     // Or, if root contains some well known files 
     // Based on these 2 hacks, or possible other characteristics, you may be reasonably sure 
    } 
} 

Questo è tutto ciò che posso offrire. Si può fare molto di più con più programmi nativi, e poi invocarli dal programma Java.

+0

Ok, suppongo che tu stia suggerendo di creare condizioni per verificare se si tratta di un dispositivo conosciuto. ad es .: se la mia radice contiene la cartella "Documents and Settings" allora sono su windows xp. Destra? – dierre

+0

Bene, per scoprire il sistema operativo è più semplice (System.getProperty ("os.name") ecc.). Mi riferivo a distinguere il disco rigido esterno da altre unità possibili (partizione dell'hard disk, iPod, CD, DVD ecc.). –

+0

Bene, ho dovuto gradire il tuo suggerimento. Ho usato listRoots per Windows e JNI per Linux con mount. – dierre

2

È possibile verificare il progetto javax.usb. Attualmente ci sono due implementazioni certificate, per Linux e BSD, e uno implementation for windows (come sembra, non è ancora completo, ma suppongo che consenta di elencare i dispositivi USB collegati).

Ma io non sono sicuro se la possibilita 'di messa in vendita solo le unità USB (invece che tutte le unità come in @Amrinder Arora risposta) vale la pena adottare un nuovo set di biblioteca e di lotta con un'implementazione semi-completa ...

1

Una bella modo è stato fornito in nio. Verificare:

import java.nio.file.*; 
for(Path p:FileSystems.getDefault().getRootDirectories()){ 
    System.out.println(p); 
} 

Otterrete tutte le radici come oggetti di percorso;

Problemi correlati