Java: Wie Speicherplatz auf Windows-System zu bestimmen, vor der 1.6
Frage
Ich möchte den verfügbaren Speicherplatz auf Windows bestimmen. Mir ist es egal, dass mein Code nicht tragbar ist. Ich benutze diese:
String[] command = {"dir",drive};
Process process = Runtime.getRuntime().exec(command);
InputStream result = process.getInputStream();
Ziel, das Ergebnis einen analysieren „dir C:“ Art des Anrufs, aber der String ich von der Kommandozeile Anruf erhalten ist, als ob ich mich mit einer /W
Option genannt (keine Informationen über Dateigrößen oder Festplattennutzung geben / Freiraum). (Obwohl, wenn ich starten dir C:
direkt von der Kommandozeile aus, bekomme ich das erwartete Ergebnis, so dass es keine dir
speziellen Setup auf meinem System.) Der Versuch, ein Token /-W
passieren oder auf jede andere Option scheint nicht zu funktionieren: Bekomme ich nur die Name der Ordner / Dateien im Laufwerk enthalten, aber keine anderen Informationen auch immer.
Kennt jemand einen Fix / Abhilfe?
Hinweis:
Ich kann nicht entlang der fsutil
Weg gehen, weil fsutil
nicht auf Netzlaufwerken funktioniert.
Lösung
Es klingt wie Ihr exec()
ist ein Programm namens „dir“ irgendwo in dem Weg, weil mit Ihrem String[] command
zu finden, da es sonst würde ich erwarten, ist, dass Sie eine IOException (The system cannot find the file specified)
zu bekommen. Der Standard-Verzeichnis-Befehl in die Eingabeaufforderung cmd.exe gebaut und ist kein eigenständiges Programm, das Sie in seinem eigenen Recht ausführen können.
den Befehl dir in cmd.exe Sie die Option / c auf cmd.exe verwenden müssen gebaut auszuführen, die den angegebenen Befehl ausführt und dann beendet. Also, wenn Sie ausführen:
cmd /c dir
Ihre Argumente zu übergeben wäre exec:
String[] command = { "cmd", "/c", "dir", drive };
Andere Tipps
Wenn Sie nicht über Portabilität ist es egal, verwenden Sie die GetDiskFreeSpaceEx Methode von Win32-API. Wickeln Sie es mit JNI, und Viola!
Ihr Java-Code soll wie folgt aussehen:
public native long getFreeSpace(String driveName);
und der Rest kann durch das Beispiel geschehen hier . Ich denke, dass während JNI seine Performance-Probleme hat, ist es weniger wahrscheinlich, dass die Menge der pain Sie mithilfe der Process-Klasse ertragen ....
Apache Commons hat FileSystemUtils.freeSpaceKb () die Cross platfrom etc etc funktioniert