¿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() {
Runtime runtime = Runtime.getRuntime();
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:
Citar
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() {
Runtime runtime = Runtime.getRuntime();
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(){
File file = new File("/");
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 ;-)
No he probado ese método que propones, pero, desde la JSE6 se puede, mira en el api, la clase File en java.io.
Los métodos:
public long getTotalSpace();
public long getFreeSpace();
public long getUsableSpace();
Cita de: kinos en 21 Agosto 2009, 21:18 PM
¿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() {
Runtime runtime = Runtime.getRuntime();
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:
Citar
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"
los metodos de obetenciond e datos sobre la memoria de la cakse runtime, deveuelven las estadisticas de la memoria del heap (un sector de la ram, que usa java para ejecutarse)
Saludos
Cierto -Ramc- y Debci ambos tienen razon ;D
Puedes intentar algo asi.
import java.io.*;
public class discoDuro {
public static void main(String[] args) {
new discoDuro();
}
public discoDuro()
{
estadoDiscoDuro();
}
public void estadoDiscoDuro() {
File drive = new File("C:\\");
long espacioTotal = drive.getTotalSpace();
long espacioLibre = drive.getFreeSpace();
System.out.println("Espacio Total: " +espacioTotal +" kB = " +espacioTotal/1073741824 +" GB");
System.out.println("Espacio Libre: " +espacioLibre +" kB = " +espacioLibre/1073741824 +" GB");
}
}
para calcular el espacio usado puedes usar el método o calcularlo mediante una resta.
Saludos
mm no lo habia pensado... esta bien jeje, lo añadiré a mi paquete de clases.
Saludos
Que bueno el post de verdad me habeis salvado gracias