ruta - Obtener el directorio de trabajo actual en Java
obtener ruta donde se ejecuta la aplicacion java (8)
¿Quién dice que tu clase principal está en un archivo en un disco duro local? Las clases se suelen agrupar en archivos JAR y, a veces, se cargan en la red o incluso se generan sobre la marcha.
Entonces, ¿qué es lo que realmente quieres hacer? Probablemente haya una manera de hacerlo que no haga suposiciones sobre el origen de las clases.
Digamos que tengo mi clase principal en C: / Users / Justian / Documents.
¿Cómo puedo hacer que mi programa muestre que está en C: / Users / Justian / Documents.
Hard-Coding no es una opción; necesita ser adaptable si se mueve a otra ubicación.
Quiero volcar un grupo de archivos CSV en una carpeta, hacer que el programa reconozca todos los archivos, luego cargar los datos y manipularlos. Realmente solo quiero saber cómo navegar a esa carpeta.
Quiero volcar un grupo de archivos CSV en una carpeta, hacer que el programa reconozca todos los archivos, luego cargar los datos y manipularlos. Realmente solo quiero saber cómo navegar a esa carpeta.
Acabo de usar:
import java.nio.file.Path;
import java.nio.file.Paths;
...
Path workingDirectory=Paths.get(".").toAbsolutePath();
Si desea la ruta absoluta del código fuente actual, mi sugerencia es:
String internalPath = this.getClass().getName().replace(".", File.separator);
String externalPath = System.getProperty("user.dir")+File.separator+"src";
String workDir = externalPath+File.separator+internalPath.substring(0, internalPath.lastIndexOf(File.separator));
Si desea obtener su directorio de trabajo actual, use la siguiente línea
System.out.println(new File("").getAbsolutePath());
Use CodeSource#getLocation()
. Esto funciona bien en archivos JAR también. Puede obtener CodeSource
por ProtectionDomain#getCodeSource()
y ProtectionDomain
a su vez se puede obtener por Class#getProtectionDomain()
.
public class Test {
public static void main(String... args) throws Exception {
URL location = Test.class.getProtectionDomain().getCodeSource().getLocation();
System.out.println(location.getFile());
}
}
Actualización según el comentario del PO:
Quiero volcar un grupo de archivos CSV en una carpeta, hacer que el programa reconozca todos los archivos, luego cargar los datos y manipularlos. Realmente solo quiero saber cómo navegar a esa carpeta.
Eso requeriría hardcoding / saber su camino relativo en su programa. En lugar de considerar agregar su ruta a la ruta de clase para que pueda usar ClassLoader#getResource()
File classpathRoot = new File(classLoader.getResource("").getPath());
File[] csvFiles = classpathRoot.listFiles(new FilenameFilter() {
@Override public boolean accept(File dir, String name) {
return name.endsWith(".csv");
}
});
O para pasar su ruta como argumento main()
.
Una forma sería usar la propiedad del sistema System.getProperty("user.dir");
esto le dará "El directorio de trabajo actual cuando las propiedades se inicializaron". Esto es probablemente lo que quieres. para averiguar dónde se emitió el comando java
, en su caso en el directorio con los archivos para procesar, aunque el archivo .jar real podría residir en otro lugar en la máquina. Tener el directorio del archivo .jar real no es tan útil en la mayoría de los casos.
A continuación, se imprimirá el directorio actual desde donde se invocó el comando, independientemente de dónde esté el archivo .class o .jar en el que se encuentra el archivo .class.
public class Test
{
public static void main(final String[] args)
{
final String dir = System.getProperty("user.dir");
System.out.println("current dir = " + dir);
}
}
si está en /User/me/
y su archivo .jar que contiene el código anterior está en /opt/some/nested/dir/
el comando java -jar /opt/some/nested/dir/test.jar Test
dará salida a la current dir = /User/me
.
También debería considerar como un extra la utilización de un buen analizador de argumentos de línea de comando orientado a objetos. Recomiendo mucho JSAP , el Analizador de Argumento Simple de Java. Esto le permitiría usar System.getProperty("user.dir")
y alternativamente pasar algo más para System.getProperty("user.dir")
el comportamiento. Una solución mucho más fácil de mantener. Esto haría que pasar en el directorio para procesar sea muy fácil de hacer, y poder recurrir a user.dir
si no se pasó nada.
File currentDirectory = new File(new File(".").getAbsolutePath());
System.out.println(currentDirectory.getCanonicalPath());
System.out.println(currentDirectory.getAbsolutePath());
Imprime algo como:
/path/to/current/directory
/path/to/current/directory/.
Tenga en cuenta que File.getCanonicalPath()
arroja una IOException marcada, pero eliminará cosas como ../../../
this.getClass().getClassLoader().getResource("").getPath()