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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top