¿Cómo se puede obtener el espacio libre del disco duro donde se ejecuta la aplicación?
He probado con esto pero nosé si es correcto:
package memoria;
import java.lang.management.MemoryMXBean;
import java.lang.management.ManagementFactory;
public class Main {
public static void main
(String[] args
) { Main apli = new Main();
apli.estadoMemoria();
}
public void estadoMemoria() {
long freeMemory = runtime.freeMemory();
long totalMemory = runtime.totalMemory();
long maxMemory = runtime.maxMemory();
System.
out.
println("Max Memory :" + (maxMemory
/ 1024.0) + " KB"); System.
out.
println("Total Memory :" + (totalMemory
/ 1024.0) + " KB"); System.
out.
println("Free Memory :" + (freeMemory
/ 1024.0) + " KB"); System.
out.
println("Used Memory :" + (totalMemory
/ 1024.0 - freeMemory
/ 1024.0) + " KB");
System.
out.
println(" =============== "); MemoryMXBean mx = ManagementFactory.getMemoryMXBean();
long initMemory = mx.getHeapMemoryUsage().getInit() + mx.getNonHeapMemoryUsage().getInit();
long usedMemory = mx.getHeapMemoryUsage().getUsed() + mx.getNonHeapMemoryUsage().getUsed();
long committedMemory = mx.getHeapMemoryUsage().getCommitted() + mx.getNonHeapMemoryUsage().getCommitted();
long _maxMemory = mx.getHeapMemoryUsage().getMax() + mx.getNonHeapMemoryUsage().getMax();
System.
out.
println("Max memory:" + (_maxMemory
/ 1024.0) + " KB"); System.
out.
println("Committed memory:" + (committedMemory
/ 1024.0) + " KB"); System.
out.
println("Init memory:" + (initMemory
/ 1024.0) + " KB"); System.
out.
println("Used memory:" + (usedMemory
/ 1024.0) + " KB");
}
}
Me ha reportado estos datos:
Max Memory :499008.0 KB
Total Memory :32384.0 KB
Free Memory :32167.6015625 KB
Used Memory :216.3984375 KB
===============
Max memory:679232.0 KB
Committed memory:51072.0 KB
Init memory:51067.0 KB
Used memory:2695.0234375 KB
Cuantos gigas libres tengo en el disco duro? con el editor de particiones e mirado y tengo 49.54 GiB y según este programa dice... "Free Memory :32167.6015625 KB"
Código corregido:
package memoria;
import java.lang.management.MemoryMXBean;
import java.lang.management.ManagementFactory;
import java.io.File;
public class Main {
public static void main
(String[] args
) { Main apli = new Main();
apli.estadoMemoriaHeap();
apli.estadoMemoriaDiscoDuro();
}
//estadisticas de la memoria del heap
public void estadoMemoriaHeap() {
long freeMemory = runtime.freeMemory();
long totalMemory = runtime.totalMemory();
long maxMemory = runtime.maxMemory();
System.
out.
println("\nEstadoMemoriaHeap():"); System.
out.
println("Max Memory :" + (maxMemory
/ 1024.0) + " KB"); System.
out.
println("Total Memory :" + (totalMemory
/ 1024.0) + " KB"); System.
out.
println("Free Memory :" + (freeMemory
/ 1024.0) + " KB"); System.
out.
println("Used Memory :" + (totalMemory
/ 1024.0 - freeMemory
/ 1024.0) + " KB");
System.
out.
println(" =============== "); MemoryMXBean mx = ManagementFactory.getMemoryMXBean();
long initMemory = mx.getHeapMemoryUsage().getInit() + mx.getNonHeapMemoryUsage().getInit();
long usedMemory = mx.getHeapMemoryUsage().getUsed() + mx.getNonHeapMemoryUsage().getUsed();
long committedMemory = mx.getHeapMemoryUsage().getCommitted() + mx.getNonHeapMemoryUsage().getCommitted();
long _maxMemory = mx.getHeapMemoryUsage().getMax() + mx.getNonHeapMemoryUsage().getMax();
System.
out.
println("Max memory:" + (_maxMemory
/ 1024.0) + " KB"); System.
out.
println("Committed memory:" + (committedMemory
/ 1024.0) + " KB"); System.
out.
println("Init memory:" + (initMemory
/ 1024.0) + " KB"); System.
out.
println("Used memory:" + (usedMemory
/ 1024.0) + " KB");
}
//estadisticas de la memoria del disco duro
public void estadoMemoriaDiscoDuro(){
long totalSpace = file.getTotalSpace();
long freeSpace = file.getFreeSpace();
long UsableSpace = file.getUsableSpace();
System.
out.
println("\nEstadoMemoriaDiscoDuro():"); System.
out.
println("Total Space :" + (totalSpace
/ 1024.0) + " KB"); System.
out.
println("Free Space :" + (freeSpace
/ 1024.0) + " KB"); System.
out.
println("Usable Space :" + (UsableSpace
/ 1024.0) + " KB"); }
}
El método getUsableSpace() no es muy aproximado, mejor hacer la resta como dice Darhius.
Gracias por contestar a todos