Foro de elhacker.net

Programación => Java => Mensaje iniciado por: kinos en 21 Agosto 2009, 21:18 pm



Título: obtener el espacio libre del disco duro donde se ejecuta la aplicación
Publicado por: 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:

Código
  1. package memoria;
  2. import java.lang.management.MemoryMXBean;
  3. import java.lang.management.ManagementFactory;
  4.  
  5. public class Main {
  6.  
  7.    public static void main(String[] args) {
  8.        Main apli = new Main();
  9.        apli.estadoMemoria();
  10.    }
  11.  
  12.    public void estadoMemoria() {
  13.        Runtime runtime = Runtime.getRuntime();
  14.  
  15.        long freeMemory = runtime.freeMemory();
  16.        long totalMemory = runtime.totalMemory();
  17.        long maxMemory = runtime.maxMemory();
  18.  
  19.        System.out.println("Max   Memory  :" + (maxMemory / 1024.0) + " KB");
  20.        System.out.println("Total Memory  :" + (totalMemory / 1024.0) + " KB");
  21.        System.out.println("Free  Memory  :" + (freeMemory / 1024.0) + " KB");
  22.        System.out.println("Used  Memory  :" + (totalMemory / 1024.0 - freeMemory / 1024.0) + " KB");
  23.  
  24.        System.out.println("         ===============         ");
  25.        MemoryMXBean mx = ManagementFactory.getMemoryMXBean();
  26.  
  27.        long initMemory = mx.getHeapMemoryUsage().getInit() + mx.getNonHeapMemoryUsage().getInit();
  28.        long usedMemory = mx.getHeapMemoryUsage().getUsed() + mx.getNonHeapMemoryUsage().getUsed();
  29.        long committedMemory = mx.getHeapMemoryUsage().getCommitted() + mx.getNonHeapMemoryUsage().getCommitted();
  30.        long _maxMemory = mx.getHeapMemoryUsage().getMax() + mx.getNonHeapMemoryUsage().getMax();
  31.  
  32.        System.out.println("Max       memory:" + (_maxMemory / 1024.0) + " KB");
  33.        System.out.println("Committed memory:" + (committedMemory / 1024.0) + " KB");
  34.        System.out.println("Init      memory:" + (initMemory / 1024.0) + " KB");
  35.        System.out.println("Used      memory:" + (usedMemory / 1024.0) + " KB");
  36.  
  37.    }
  38. }
  39.  

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:
Código
  1. package memoria;
  2. import java.lang.management.MemoryMXBean;
  3. import java.lang.management.ManagementFactory;
  4. import java.io.File;
  5.  
  6. public class Main {
  7.  
  8.    public static void main(String[] args) {
  9.        Main apli = new Main();
  10.        apli.estadoMemoriaHeap();
  11.        apli.estadoMemoriaDiscoDuro();
  12.    }
  13.  
  14.    //estadisticas de la memoria del heap
  15.    public void estadoMemoriaHeap() {
  16.        Runtime runtime = Runtime.getRuntime();
  17.  
  18.        long freeMemory = runtime.freeMemory();
  19.        long totalMemory = runtime.totalMemory();
  20.        long maxMemory = runtime.maxMemory();
  21.  
  22.        System.out.println("\nEstadoMemoriaHeap():");
  23.        System.out.println("Max   Memory  :" + (maxMemory / 1024.0) + " KB");
  24.        System.out.println("Total Memory  :" + (totalMemory / 1024.0) + " KB");
  25.        System.out.println("Free  Memory  :" + (freeMemory / 1024.0) + " KB");
  26.        System.out.println("Used  Memory  :" + (totalMemory / 1024.0 - freeMemory / 1024.0) + " KB");
  27.  
  28.        System.out.println("         ===============         ");
  29.        MemoryMXBean mx = ManagementFactory.getMemoryMXBean();
  30.  
  31.        long initMemory = mx.getHeapMemoryUsage().getInit() + mx.getNonHeapMemoryUsage().getInit();
  32.        long usedMemory = mx.getHeapMemoryUsage().getUsed() + mx.getNonHeapMemoryUsage().getUsed();
  33.        long committedMemory = mx.getHeapMemoryUsage().getCommitted() + mx.getNonHeapMemoryUsage().getCommitted();
  34.        long _maxMemory = mx.getHeapMemoryUsage().getMax() + mx.getNonHeapMemoryUsage().getMax();
  35.  
  36.        System.out.println("Max       memory:" + (_maxMemory / 1024.0) + " KB");
  37.        System.out.println("Committed memory:" + (committedMemory / 1024.0) + " KB");
  38.        System.out.println("Init      memory:" + (initMemory / 1024.0) + " KB");
  39.        System.out.println("Used      memory:" + (usedMemory / 1024.0) + " KB");
  40.  
  41.    }
  42.    //estadisticas de la memoria del disco duro
  43.    public void estadoMemoriaDiscoDuro(){
  44.  
  45.        File file = new File("/");
  46.        long totalSpace = file.getTotalSpace();
  47.        long freeSpace = file.getFreeSpace();
  48.        long UsableSpace = file.getUsableSpace();
  49.  
  50.        System.out.println("\nEstadoMemoriaDiscoDuro():");
  51.        System.out.println("Total Space  :" + (totalSpace / 1024.0) + " KB");
  52.        System.out.println("Free  Space  :" + (freeSpace / 1024.0) + " KB");
  53.        System.out.println("Usable  Space  :" + (UsableSpace / 1024.0) + " KB");
  54.    }
  55. }
  56.  

El método getUsableSpace() no es muy aproximado, mejor hacer la resta como dice Darhius.

Gracias por contestar a todos  ;-)


Título: Re: obtener el espacio libre del disco duro donde se ejecuta la aplicación
Publicado por: -Ramc- en 21 Agosto 2009, 22:40 pm
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:
Código:
     public long getTotalSpace();
     public long getFreeSpace();
     public long getUsableSpace();


Título: Re: obtener el espacio libre del disco duro donde se ejecuta la aplicación
Publicado por: Debci en 21 Agosto 2009, 22:47 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:

Código
  1. package memoria;
  2. import java.lang.management.MemoryMXBean;
  3. import java.lang.management.ManagementFactory;
  4.  
  5. public class Main {
  6.  
  7.    public static void main(String[] args) {
  8.        Main apli = new Main();
  9.        apli.estadoMemoria();
  10.    }
  11.  
  12.    public void estadoMemoria() {
  13.        Runtime runtime = Runtime.getRuntime();
  14.  
  15.        long freeMemory = runtime.freeMemory();
  16.        long totalMemory = runtime.totalMemory();
  17.        long maxMemory = runtime.maxMemory();
  18.  
  19.        System.out.println("Max   Memory  :" + (maxMemory / 1024.0) + " KB");
  20.        System.out.println("Total Memory  :" + (totalMemory / 1024.0) + " KB");
  21.        System.out.println("Free  Memory  :" + (freeMemory / 1024.0) + " KB");
  22.        System.out.println("Used  Memory  :" + (totalMemory / 1024.0 - freeMemory / 1024.0) + " KB");
  23.  
  24.        System.out.println("         ===============         ");
  25.        MemoryMXBean mx = ManagementFactory.getMemoryMXBean();
  26.  
  27.        long initMemory = mx.getHeapMemoryUsage().getInit() + mx.getNonHeapMemoryUsage().getInit();
  28.        long usedMemory = mx.getHeapMemoryUsage().getUsed() + mx.getNonHeapMemoryUsage().getUsed();
  29.        long committedMemory = mx.getHeapMemoryUsage().getCommitted() + mx.getNonHeapMemoryUsage().getCommitted();
  30.        long _maxMemory = mx.getHeapMemoryUsage().getMax() + mx.getNonHeapMemoryUsage().getMax();
  31.  
  32.        System.out.println("Max       memory:" + (_maxMemory / 1024.0) + " KB");
  33.        System.out.println("Committed memory:" + (committedMemory / 1024.0) + " KB");
  34.        System.out.println("Init      memory:" + (initMemory / 1024.0) + " KB");
  35.        System.out.println("Used      memory:" + (usedMemory / 1024.0) + " KB");
  36.  
  37.    }
  38. }
  39.  

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


Título: Re: obtener el espacio libre del disco duro donde se ejecuta la aplicación
Publicado por: 1mpuls0 en 21 Agosto 2009, 23:16 pm
Cierto -Ramc- y Debci ambos tienen razon  ;D

Puedes intentar algo asi.

Código
  1. import java.io.*;
  2.  
  3. public class discoDuro {
  4.  
  5.    public static void main(String[] args) {
  6.         new discoDuro();
  7.    }
  8.  
  9.    public discoDuro()
  10.    {
  11.     estadoDiscoDuro();
  12.    }
  13.  
  14.    public void estadoDiscoDuro() {
  15.        File drive = new File("C:\\");
  16. long espacioTotal = drive.getTotalSpace();
  17. long espacioLibre = drive.getFreeSpace();
  18. System.out.println("Espacio Total: " +espacioTotal +" kB = " +espacioTotal/1073741824 +" GB");
  19. System.out.println("Espacio Libre: " +espacioLibre +" kB = " +espacioLibre/1073741824 +" GB");
  20.    }
  21. }

para calcular el espacio usado puedes usar el método o calcularlo mediante una resta.


Saludos


Título: Re: obtener el espacio libre del disco duro donde se ejecuta la aplicación
Publicado por: Debci en 22 Agosto 2009, 17:13 pm
mm no lo habia pensado... esta bien jeje, lo añadiré a mi paquete de clases.

Saludos


Título: Re: obtener el espacio libre del disco duro donde se ejecuta la aplicación
Publicado por: goldenfalc en 18 Mayo 2010, 12:32 pm
Que bueno el post de verdad me habeis salvado gracias