Domanda

Voglio determinare lo spazio disponibile sul disco di Windows. Non mi interessa che il mio codice non è portabile. Io uso questo:

String[] command = {"dir",drive};
Process process = Runtime.getRuntime().exec(command);
InputStream result = process.getInputStream();

Con l'obiettivo di analizzare il risultato di una "dir C:" tipo di chiamata, ma la stringa ricevo dalla chiamata linea di comando è come se ho chiamato dir con un'opzione /W (non dare alcuna informazione sulle dimensioni di file o l'utilizzo del disco / spazio libero). (Anche se quando mi lancio dir C: direttamente dalla linea di comando, ottengo il risultato atteso, quindi non c'è dir configurazione particolare sul mio sistema.) Cercando di passare un /-W di token o su qualsiasi altra opzione sembra non funzionare: Ho appena ottenere il nome delle cartelle / file contenuti nel disco, ma nessun'altra informazione di sorta.

Qualcuno conosce un fix / workaround?

Nota:

Non posso andare lungo il percorso fsutil, perché fsutil non funziona su unità di rete.

È stato utile?

Soluzione

Sembra che il tuo exec() è trovare un programma chiamato "dir" da qualche parte nel vostro percorso perché con il vostro String[] command in quanto è lo farei altrimenti si aspettano di ottenere una IOException (The system cannot find the file specified). Il comando standard dir è integrato nel prompt dei comandi cmd.exe e non è un programma standalone è possibile eseguire a sé stante.

Per eseguire il comando dir integrato in cmd.exe è necessario utilizzare l'opzione / c su cmd.exe, che esegue il comando specificato e poi esce. Quindi, se si desidera eseguire:

cmd /c dir 

tuoi argomenti da passare a exec potrebbe essere:

String[] command = { "cmd", "/c", "dir", drive };

Altri suggerimenti

Se non si cura di portabilità, utilizzare il GetDiskFreeSpaceEx metodo da API Win32. Avvolgere utilizzando JNI, e viola!

Il codice Java dovrebbe essere simile:

public native long getFreeSpace(String driveName);

e il resto può essere fatto attraverso l'esempio qui . Penso che mentre JNI ha i suoi problemi di prestazioni, è meno probabile che a causare la quantità di dolore ti sopportare utilizzando la classe Process ....

Apache Commons ha FileSystemUtils.freeSpaceKb () che lavorerà platfrom croce etc etc

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top