2010-12-06 66 views
10

Estoy haciendo un navegador de archivos básico, y quiero saber cómo obtener el directorio raíz predeterminado. Sé que java.io.File.listRoots() da todas las raíces (para mí es A:\, C:\, D:\, E:\, F:\, G:\, H:\, I:\, L:\ T:\, U:\, X:\, Y:\, Z:\), pero quiero la que el usuario usa principalmente (es decir, la que tiene el sistema operativo), así sé de dónde comenzar la navegación.Obtener el directorio raíz predeterminado en Java

Respuesta

2

Conseguir la partición raíz del sistema operativo es sólo una cosa en Windows desde el Unix siempre es /.

Por lo tanto, el código siguiente funciona sólo Windows:

System.getenv("SystemDrive"); 

Se pone el valor de la variable de entorno SystemDrive. Esto siempre debe devolver la partición raíz del sistema operativo, p. C:.

15

No estoy seguro si esto es de alguna ayuda, pero usted podría intentar:

import javax.swing.filechooser.*; 

FileSystemView.getFileSystemView().getRoots()[0]; 

o

FileSystemView.getFileSystemView().getHomeDirectory(); 

o

System.getProperty("user.dir"); 

Para el último fragmento, se puede obtener la directorio raíz navegando hacia arriba usando getParent() hasta que se devuelva null.

+0

Enlaces ambos rotos – IanGilham

+0

@IanGilham Creo que quisiste comentar otra respuesta – Supuhstar

+1

Sí, es malo. Parece que has encontrado el que quise decir. – IanGilham

0
public static String rootDirectory(){ 
     return File.listRoots()[0].getAbsolutePath(); 
} 
+7

¿está garantizado que no será, por ejemplo, la unidad 'A' en Windows si tengo una unidad de disquete conectada? – Supuhstar

+1

@Supuhstar, acabo de hacer una prueba, y la respuesta es no. En Windows, devuelve la lista de raíces en orden alfabético, por lo que "A: \" es lo primero. Además, de acuerdo con los documentos (https://docs.oracle.com/javase/7/docs/api/java/io/File.html#listRoots()): "Una plataforma Java particular puede admitir cero o más sistemas de archivos organizados jerárquicamente ". En otras palabras, el índice cero de desreferenciación 0 puede causar una ArrayIndexOutOfBoundsException. Esta respuesta no es completamente multiplataforma y no es confiable. –

Cuestiones relacionadas