obtener el espacio libre del disco duro donde se ejecuta la aplicación

Iniciado por kinos, 21 Agosto 2009, 21:18 PM

0 Miembros y 1 Visitante están viendo este tema.

kinos

¿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 (java) [Seleccionar]

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:
Código (java) [Seleccionar]

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  ;-)

-Ramc-

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();

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

Debci

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:

Código (java) [Seleccionar]

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

1mpuls0

Cierto -Ramc- y Debci ambos tienen razon  ;D

Puedes intentar algo asi.

Código (java) [Seleccionar]

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
abc

Debci

mm no lo habia pensado... esta bien jeje, lo añadiré a mi paquete de clases.

Saludos

goldenfalc