Quiero el nombre de la partición con su espacio total, espacio usado y espacio libre para el sistema Linux usando el programa Java.
Obtengo el valor correcto en el caso del sistema Windows, pero en Linux solo obtengo información de una unidad:
Esto es lo que he intentado hasta ahora.
public class DiskSpace { public static void main(String[] args) { FileSystemView fsv = FileSystemView.getFileSystemView(); File[] drives = File.listRoots(); if (drives != null && drives.length > 0) { for (File aDrive : drives) { System.out.println("Drive Letter: " + aDrive); System.out.println("\tType: " + fsv.getSystemTypeDescription(aDrive)); System.out.println("\tTotal space: " + aDrive.getTotalSpace()); System.out.println("\tFree space: " + aDrive.getFreeSpace()); System.out.println(); } } }No hay letras de unidad en Linux. Si quiere saber qué particiones hay y dónde están montadas, lea /proc/mounts . Cuando tenga un punto de montaje (segunda columna en /proc/mounts), use new File(mountpoint).getTotalSpace() para obtener el espacio total.
Los sistemas Linux, Unix y similares a Unix tienen un sistema de archivos con una raíz dentro de la cual puede haber varios puntos de montaje en los que se pueden montar particiones que contienen sistemas de archivos Unix, parciales o completos; los sistemas de archivos que no son Unix también se pueden montar con el software disponible para manejar las transformaciones necesarias, pero el modelo unificado de sistema de archivos de raíz única permanece.
Si la clase FileSystemView que está utilizando es del paquete javax.swing.filechooser , no espere demasiado:
FileSystemView es la puerta de entrada de JFileChooser al sistema de archivos. Dado que la API de archivo JDK1.1 no permite el acceso a información como particiones raíz, información de tipo de archivo o bits de archivo ocultos, esta clase está diseñada para intuir la mayor cantidad posible de información del sistema de archivos específica del sistema operativo.
Los licenciatarios de Java pueden querer proporcionar una implementación diferente de FileSystemView para manejar mejor un sistema operativo dado.
Ese segundo párrafo es clave.
La implementación de la máquina virtual de Java está destinada a abstraer el tipo de cosas específicas de la plataforma que desea en este caso. Para tener éxito, deberá escribir o encontrar clases de envoltura de llamadas nativas para la API del sistema nativo de cada plataforma que admitirá. Es poco probable que las abstracciones de "alto nivel", como la clase FileSystemView , sean completas o confiables para proporcionar la información que necesita.
Este es un fragmento de código para mostrar solo los medios externos montados en el nombre.
String OS = System.getProperty("os.name"); if(OS.equals("Linux")) { String s = ""; Runtime rt = Runtime.getRuntime(); int n=0; Process ps = rt.exec("ls /run/media/Rancho");// Write your UserName, mine is Rancho InputStream in = ps.getInputStream(); while((n = in.read())!=-1) { char ch = (char) n; s+ = ch; } System.out.println(s); }