una ruta obtener nombre listar ejecuta donde con carpeta archivos archivo aplicacion java working-directory

ruta - Obtener el directorio de trabajo actual en Java



obtener ruta donde se ejecuta la aplicacion java (20)

Quiero acceder a mi directorio de trabajo actual usando

String current = new java.io.File( "." ).getCanonicalPath(); System.out.println("Current dir:"+current); String currentDir = System.getProperty("user.dir"); System.out.println("Current dir using System:" +currentDir);

Salida:

Current dir: C:/WINDOWS/system32 Current dir using System: C:/WINDOWS/system32

Mi salida no es correcta porque la unidad C no es mi directorio actual. Necesito ayuda en este sentido.


¿Qué te hace pensar que c: / windows / system32 no es tu directorio actual? La propiedad user.dir es explícitamente "directorio de trabajo actual del usuario".

Para decirlo de otra manera, a menos que inicies Java desde la línea de comandos, c: / windows / system32 probablemente sea tu CWD. Es decir, si hace doble clic para iniciar su programa, es poco probable que CWD sea el directorio desde el que hace doble clic.

Editar : Parece que esto solo es cierto para las versiones anteriores de Windows y / o Java.


Consulte: http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html

Con java.nio.file.Path y java.nio.file.Paths , puede hacer lo siguiente para mostrar lo que Java cree que es su ruta actual. Esto es para 7 y sigue, y usa NIO.

Path currentRelativePath = Paths.get(""); String s = currentRelativePath.toAbsolutePath().toString(); System.out.println("Current relative path is: " + s);

Esta salida de la Current relative path is: /Users/george/NetBeansProjects/Tutorials que en mi caso es desde donde ejecuté la clase. La construcción de rutas de forma relativa, al no utilizar un separador inicial para indicar que está construyendo una ruta absoluta, utilizará esta ruta relativa como punto de partida.


El directorio de trabajo actual se define de manera diferente en diferentes implementaciones de Java. Para ciertas versiones anteriores a Java 7, no había una forma consistente de obtener el directorio de trabajo. Puede solucionar esto lanzando el archivo Java con -D y definiendo una variable para mantener la información

Algo como

java -D com.mycompany.workingDir="%0"

Eso no está del todo bien, pero entiendes la idea. Luego System.getProperty("com.mycompany.workingDir") ...


En Linux, cuando ejecuta un archivo jar desde la terminal , ambos devolverán la misma String : "/ home / CurrentUser" , sin importar dónde se encuentre el archivo jar. Depende de qué directorio actual está utilizando con su terminal, cuando inicie el archivo jar.

Paths.get("").toAbsolutePath().toString(); System.getProperty("user.dir");

Si su Class con main se llamaría MainClass , entonces intente:

MainClass.class.getProtectionDomain().getCodeSource().getLocation().getFile();

Esto devolverá una String con la ruta absoluta del archivo jar .


Espero que desee acceder al directorio actual, incluido el paquete, es decir, si su programa Java está en c:/myApp/com/foo/src/service/MyTest.java y desea imprimir hasta c:/myApp/com/foo/src/service entonces puedes probar el siguiente código:

String myCurrentDir = System.getProperty("user.dir") + File.separator + System.getProperty("sun.java.command") .substring(0, System.getProperty("sun.java.command").lastIndexOf(".")) .replace(".", File.separator); System.out.println(myCurrentDir);

Nota: este código solo se prueba en Windows con Oracle JRE.


Esta es la solución para mi

File currentDir = new File("");


Esto le dará la ruta de su directorio de trabajo actual:

Path path = FileSystems.getDefault().getPath(".");

Y esto le dará la ruta a un archivo llamado "Foo.txt" en el directorio de trabajo:

Path path = FileSystems.getDefault().getPath("Foo.txt");

Edición: para obtener una ruta absoluta del directorio actual desde la raíz del sistema de archivos:

Path path = FileSystems.getDefault().getPath(".").toAbsolutePath();


Estoy en Linux y obtengo el mismo resultado para estos dos enfoques:

@Test public void aaa() { System.err.println(Paths.get("").toAbsolutePath().toString()); System.err.println(System.getProperty("user.dir")); }

Paths.get("")

System.getProperty("user.dir")


He encontrado esta solución en los comentarios, que es mejor que otros y más portátil:

String cwd = new File("").getAbsolutePath();


Los siguientes trabajos en Java 7 y superiores (consulte here documentación).

import java.nio.file.Paths; Paths.get(".").toAbsolutePath().normalize().toString();


Ninguna de las respuestas publicadas aquí funcionó para mí. Esto es lo que funcionó:

java.nio.file.Paths.get( getClass().getProtectionDomain().getCodeSource().getLocation().toURI() );

Edición: La versión final en mi código:

URL myURL = getClass().getProtectionDomain().getCodeSource().getLocation(); java.net.URI myURI = null; try { myURI = myURL.toURI(); } catch (URISyntaxException e1) {} return java.nio.file.Paths.get(myURI).toFile().toString()


Usando Windows user.dir devuelve el directorio como se esperaba, pero NO cuando inicia su aplicación con derechos elevados (ejecutar como administrador), en ese caso obtiene C: / WINDOWS / system32


Utilice CodeSource#getLocation() .

Esto funciona bien también en archivos JAR. Puede obtener CodeSource by ProtectionDomain#getCodeSource() y ProtectionDomain a su vez, ProtectionDomain puede obtenerse mediante 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()); } }


asuma que está intentando ejecutar su proyecto dentro de eclipse, o netbean o independiente de la línea de comandos. Tengo que escribir un método para arreglarlo.

public static final String getBasePathForClass(Class<?> clazz) { File file; try { String basePath = null; file = new File(clazz.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()); if (file.isFile() || file.getPath().endsWith(".jar") || file.getPath().endsWith(".zip")) { basePath = file.getParent(); } else { basePath = file.getPath(); } // fix to run inside eclipse if (basePath.endsWith(File.separator + "lib") || basePath.endsWith(File.separator + "bin") || basePath.endsWith("bin" + File.separator) || basePath.endsWith("lib" + File.separator)) { basePath = basePath.substring(0, basePath.length() - 4); } // fix to run inside netbean if (basePath.endsWith(File.separator + "build" + File.separator + "classes")) { basePath = basePath.substring(0, basePath.length() - 14); } // end fix if (!basePath.endsWith(File.separator)) { basePath = basePath + File.separator; } return basePath; } catch (URISyntaxException e) { throw new RuntimeException("Cannot firgue out base path for class: " + clazz.getName()); } }

Para usar, donde quiera que desee obtener una ruta base para leer el archivo, puede pasar su clase de anclaje al método anterior, el resultado puede ser lo que necesita:

Mejor,


en general, como un objeto de archivo:

File getCwd() { return new File("").getAbsoluteFile(); }

puede querer tener una cadena completa como "D: / a / b / c" haciendo:

getCwd().getAbsolutePath()


este es el nombre del directorio actual

String path="/home/prasad/Desktop/folderName"; File folder = new File(path); String folderName=folder.getAbsoluteFile().getName();

esta es la ruta del directorio actual

String path=folder.getPath();


System.getProperty("java.class.path")


Mencione que está comprobado solo en Windows pero creo que funciona perfectamente en otros sistemas operativos [ Linux,MacOs,Solaris ] :).

Tenía 2 archivos .jar en el mismo directorio. Quería que desde un archivo .jar comenzara el otro archivo .jar que está en el mismo directorio.

El problema es que cuando lo inicias desde el cmd el directorio actual es system32 .

Advertencias!

  • Lo siguiente parece funcionar bastante bien en todas las pruebas que he hecho, incluso con el nombre de la carpeta ;][[;''57f2g34g87-8+9-09!2#@!$%^^&() o ()%&$%^@# funciona bien.
  • Estoy usando ProcessBuilder con lo siguiente como sigue:

🍂 ..

//The class from which i called this was the class `Main` String path = getBasePathForClass(Main.class); String applicationPath= new File(path + "application.jar").getAbsolutePath(); System.out.println("Directory Path is : "+applicationPath); //Your know try catch here //Mention that sometimes it doesn''t work for example with folder `;][[;''57f2g34g87-8+9-09!2#@!$%^^&()` ProcessBuilder builder = new ProcessBuilder("java", "-jar", applicationPath); builder.redirectErrorStream(true); Process process = builder.start(); //...code

🍂 getBasePathForClass(Class<?> classs) :

/** * Returns the absolute path of the current directory in which the given * class * file is. * * @param classs * @return The absolute path of the current directory in which the class * file is. * @author GOXR3PLUS[ user] + bachden [ user] */ public static final String getBasePathForClass(Class<?> classs) { // Local variables File file; String basePath = ""; boolean failed = false; // Let''s give a first try try { file = new File(classs.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()); if (file.isFile() || file.getPath().endsWith(".jar") || file.getPath().endsWith(".zip")) { basePath = file.getParent(); } else { basePath = file.getPath(); } } catch (URISyntaxException ex) { failed = true; Logger.getLogger(classs.getName()).log(Level.WARNING, "Cannot firgue out base path for class with way (1): ", ex); } // The above failed? if (failed) { try { file = new File(classs.getClassLoader().getResource("").toURI().getPath()); basePath = file.getAbsolutePath(); // the below is for testing purposes... // starts with File.separator? // String l = local.replaceFirst("[" + File.separator + // "/////]", "") } catch (URISyntaxException ex) { Logger.getLogger(classs.getName()).log(Level.WARNING, "Cannot firgue out base path for class with way (2): ", ex); } } // fix to run inside eclipse if (basePath.endsWith(File.separator + "lib") || basePath.endsWith(File.separator + "bin") || basePath.endsWith("bin" + File.separator) || basePath.endsWith("lib" + File.separator)) { basePath = basePath.substring(0, basePath.length() - 4); } // fix to run inside netbeans if (basePath.endsWith(File.separator + "build" + File.separator + "classes")) { basePath = basePath.substring(0, basePath.length() - 14); } // end fix if (!basePath.endsWith(File.separator)) { basePath = basePath + File.separator; } return basePath; }


public class JavaApplication1 { public static void main(String[] args) { System.out.println("Working Directory = " + System.getProperty("user.dir")); } }

Esto imprimirá una ruta absoluta completa desde donde se inicializó su aplicación.


this.getClass().getClassLoader().getResource("").getPath()