Esiste un modo indipendente dalla piattaforma con Java per rilevare il tipo di unità su cui si trova un file? Fondamentalmente sono interessato a distinguere tra: dischi rigidi , unità rimovibili (come chiavette USB) e condivisioni di rete. Le soluzioni JNI/JNA non saranno utili. Java 7 può essere assunto.Java: come determinare il tipo di unità su cui si trova un file?
risposta
La classe FileSystemView
dal battente ha alcune funzionalità per supportare rilevare il tipo di azionamento (cf isFloppyDrive
, isComputerNode
). Temo che non ci sia un modo standard per rilevare se un disco è collegato tramite USB.
forzato, ad esempio non testati:
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;
....
JFileChooser fc = new JFileChooser();
FileSystemView fsv = fc.getFileSystemView();
if (fsv.isFloppyDrive(new File("A:"))) // is A: a floppy drive?
In JDK 7 c'è un'altra opzione. Non l'ho usato, ma l'API FileStore
ha un metodo type
. Il documentation dice che:
Il formato della stringa restituita da questo metodo è altamente specifico di implementazione. Può indicare, ad esempio, il formato utilizzato o se l'archivio file è locale o remoto.
A quanto pare il modo di usarlo sarebbe questo:
import java.nio.*;
....
for (FileStore store: FileSystems.getDefault().getFileStores()) {
System.out.printf("%s: %s%n", store.name(), store.type());
}
FileSystemView.isFloppyDrive() è implementato da qualcosa come "path.equals (" A: \\ ")" ciò che sfortunatamente non sarà utile. Inoltre, non ho trovato utile FileStore.type(). Restituisce "NTFS" per le mie condivisioni di rete. – mstrap
FileStore # type() restituisce "NTFS" per le unità di rete su Windows 7, Java 7. –
FileStore # type() restituisce "NTFS" anche per dischi rigidi locali su Windows 10. – simpleuser
dare uno sguardo su questa discussione: How can I get list of all drives but also get the corresponding drive type (removable,local disk, or cd-rom,dvd-rom... etc)?
In particolare prestare attenzione sulla http://docs.oracle.com/javase/1.5.0/docs/api/javax/swing/filechooser/FileSystemView.html
Io personalmente non hanno utilizzato questo ma sembra rilevante. Ha il metodo come è isFloppyDrive
.
Anche dare un'occhiata su JSmooth
FileSystemView non funzionerà. JSmooth potrebbe funzionare, anche se speravo di trovare qualche API fornita con JRE stesso. – mstrap
Si potrebbe eseguire cmd utilizzando Java con:
fsutil fsinfo drivetype {drive letter}
Il risultato vi darà qualcosa di simile:
C: - Fixed Drive
D: - CD-ROM Drive
E: - Removable Drive
P: - Remote/Network Drive
Ecco un Gist, che mostra come determinarlo usando net use
: https://gist.github.com/digulla/31eed31c7ead29ffc7a30aaf87131def
parte più importante del codice:
public boolean isDangerous(File file) {
if (!IS_WINDOWS) {
return false;
}
// Make sure the file is absolute
file = file.getAbsoluteFile();
String path = file.getPath();
// System.out.println("Checking [" + path + "]");
// UNC paths are dangerous
if (path.startsWith("//")
|| path.startsWith("\\\\")) {
// We might want to check for \\localhost or \\127.0.0.1 which would be OK, too
return true;
}
String driveLetter = path.substring(0, 1);
String colon = path.substring(1, 2);
if (!":".equals(colon)) {
throw new IllegalArgumentException("Expected 'X:': " + path);
}
return isNetworkDrive(driveLetter);
}
/** Use the command <code>net</code> to determine what this drive is.
* <code>net use</code> will return an error for anything which isn't a share.
*
* <p>Another option would be <code>fsinfo</code> but my gut feeling is that
* <code>net</code> should be available and on the path on every installation
* of Windows.
*/
private boolean isNetworkDrive(String driveLetter) {
List<String> cmd = Arrays.asList("cmd", "/c", "net", "use", driveLetter + ":");
try {
Process p = new ProcessBuilder(cmd)
.redirectErrorStream(true)
.start();
p.getOutputStream().close();
StringBuilder consoleOutput = new StringBuilder();
String line;
try (BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()))) {
while ((line = in.readLine()) != null) {
consoleOutput.append(line).append("\r\n");
}
}
int rc = p.waitFor();
// System.out.println(consoleOutput);
// System.out.println("rc=" + rc);
return rc == 0;
} catch(Exception e) {
throw new IllegalStateException("Unable to run 'net use' on " + driveLetter, e);
}
}
- 1. Come determinare il grado in cui un file è frammentato?
- 2. Come determinare il contesto in cui si trova un oggetto ColdFusion?
- 3. Come determinare il tipo di azionamento con un approccio multipiattaforma
- 4. Come determinare il tipo di certificato dal file
- 5. Determinare se un punto si trova all'interno di un triangolo
- 6. PowerShell: è possibile determinare il tipo MIME di un file?
- 7. Runner test unità di ricerca non trova file di contenuto
- 8. Il modo migliore per determinare il tipo mime di un file in java?
- 9. come determinare il tipo di file PDF utilizzando iTextSharp
- 10. Come ottenere il nome della cartella, in cui si trova il file specificato, da pathlib.path?
- 11. Excel trova le celle nell'intervallo in cui il valore di ricerca si trova all'interno della cella
- 12. Ottieni la directory in cui si trova il codice eseguito
- 13. Registrazione di attività di Grunt il cui codice si trova in file JavaScript esterni
- 14. Come si visualizza il nome file del file su cui si sta lavorando in vim?
- 15. Java: crea un oggetto il cui tipo è un parametro di tipo
- 16. Dove si trova il file jar servlet su JBoss 5.0.1?
- 17. Unità: come specificare di utilizzare un'istanza specifica di un tipo quando si risolve un altro tipo
- 18. Come determinare se il cursore del mouse si trova all'interno di un controllo
- 19. Come determinare se un personaggio si trova all'interno di un intervallo in Clojure?
- 20. Come posso determinare il tipo di un campo generico in Java?
- 21. Java non riesce a spostare (rinominare) un file quando il file risultante si trova su un altro filesystem
- 22. Come verificare se il cursore si trova su un elemento?
- 23. Come determinare se un tipo è un tipo di collezione?
- 24. Un one-liner bash da modificare nella directory in cui si trova un file
- 25. Determinare se una coordinata si trova nel raggio di un'altra
- 26. Come posso specificare come tipo di ritorno di un metodo il tipo dell'oggetto su cui viene chiamato il metodo?
- 27. Come determinare il motivo per cui la mia applicazione ASP.NET si sta riciclando
- 28. Determinare il tipo di file MS Excel con PDI Apache
- 29. Come determinare se l'aereo si trova nella fotocamera Three.js Frustum
- 30. Dove si trova il file di cronologia per ipython
Forse potrebbe essere più semplice da risolvere perché si vuole sapere questo? –
Ho bisogno di queste informazioni per avvisare gli utenti di alcuni inconvenienti del file system sottostante: le prestazioni, il monitoraggio del file system non funziona, cose del genere. – mstrap
Consulta http://stackoverflow.com/questions/3542018/how-can-i-get-list-of-all-drives-but-also-get-the-corresponding-drive-type-remo/17972420#17972420 Sto usando WMI per accedere alle informazioni desiderate. –