Quiero acceder a mi directorio de trabajo actual usando java.
Mi código :
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.
¿Cómo obtener el directorio actual?
cd
comando en tu símbolo del sistema cuando ejecutas esto?Respuestas:
Esto imprimirá una ruta absoluta completa desde donde se inicializó su aplicación.
De la documentación :
java.io
El paquete resuelve los nombres de ruta relativos utilizando el directorio de usuario actual. El directorio actual se representa como propiedad del sistema, es decir,user.dir
y es el directorio desde el que se invocó la JVM.fuente
Ver: http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html
Usando
java.nio.file.Path
yjava.nio.file.Paths
, puede hacer lo siguiente para mostrar lo que Java cree que es su ruta actual. Esto para 7 y más, y usa NIO.Esto da como resultado
Current relative path is: /Users/george/NetBeansProjects/Tutorials
que en mi caso es donde ejecuté la clase. Al construir 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.fuente
Paths.get("").getParent()
danull
. En cambio, esta funciona:Paths.get("").toAbsolutePath().getParent()
.Lo siguiente funciona en Java 7 y versiones posteriores (consulte aquí la documentación).
fuente
import java.io.File; File(".").getAbsolutePath()
?Paths.get()
puede considerarse mejor porque da acceso directo a laPath
interfaz más potente ..normalize()
en este contexto?Returns a path that is this path with redundant name elements eliminated.
Esto le dará la ruta de su directorio de trabajo actual:
Y esto le dará la ruta a un archivo llamado "Foo.txt" en el directorio de trabajo:
Editar: para obtener una ruta absoluta del directorio actual:
* Actualización * Para obtener el directorio de trabajo actual:
fuente
Path path = FileSystems.getDefault().getPath(".").toAbsolutePath();
Path
objeto que apunta a un archivo llamado.
dentro del directorio de trabajo actual. Usando una cadena vacía, en lugar de"."
trabajar para mí.Esta es la solución para mi
fuente
new File("").getAbsoluteFile()
en su lugar./
al crear una ruta relativa. Me equivoqué, no empieces con/
.../
También funciona para subir en el árbol de directorios..
.He encontrado esta solución en los comentarios que es mejor que otros y más portátil:
O incluso
fuente
¿Qué te hace pensar que c: \ windows \ system32 no es tu directorio actual? La
user.dir
propiedad es explícitamente "Directorio de trabajo actual del usuario".Para decirlo de otra manera, a menos que inicie Java desde la línea de comandos, c: \ windows \ system32 probablemente sea su CWD. Es decir, si hace doble clic para iniciar su programa, es poco probable que el CWD sea el directorio desde el que hace doble clic.
Editar : Parece que esto solo es cierto para ventanas antiguas y / o versiones de Java.
fuente
user.dir
es consistentemente la carpeta donde hice doble clic en el archivo jar.Uso
CodeSource#getLocation()
.Esto también funciona bien en archivos JAR. Puede obtener
CodeSource
porProtectionDomain#getCodeSource()
yProtectionDomain
a su vez puede obtener porClass#getProtectionDomain()
.fuente
fuente
""
si la aplicación se ejecuta desde un archivo JAR o un elemento CLASSPATH. No es lo que se pidió.getClass()
es un método de objeto, por lo que en un contexto estático solo eliminar elthis
no funciona. Tendrías que hacer referencia explícita a la clase en la que estás haciendoMyClass.class.getClassLoader().....
.generalmente, como un objeto File:
es posible que desee tener una cadena completa calificada como "D: / a / b / c" haciendo:
fuente
Estoy en Linux y obtengo el mismo resultado para ambos enfoques:
Paths.get("")
docsSystem.getProperty("user.dir")
docsfuente
En Linux cuando ejecuta un archivo jar desde la terminal , ambos devolverán lo mismo
String
: "/ home / CurrentUser" , sin importar dónde se encuentre su archivo jar. Depende de qué directorio actual esté utilizando con su terminal, cuando inicie el archivo jar.Si su
Class
conmain
que se llamaríaMainClass
, a continuación, tratar:Esto devolverá una
String
con ruta absoluta del frasco de archivo.fuente
El uso de Windows user.dir devuelve el directorio como se esperaba, pero NO cuando inicia su aplicación con derechos elevados (se ejecuta como administrador), en ese caso obtiene C: \ WINDOWS \ system32
fuente
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
ejecución y desea imprimir hastac:\myApp\com\foo\src\service
entonces, puede probar el siguiente código:Nota: Este código solo se prueba en Windows con Oracle JRE.
fuente
File.separator
lugar, o unFile
constructor de argumentos múltiples ); 3. el classpath se especifica en la línea de comando, y el 'directorio actual que incluye el paquete' (??) es: a. especificado primero, b. especificado absolutamente, c. coincide exactamente con la CWD (incluso con la insensibilidad a mayúsculas y minúsculas de Windows), y d. es un descendiente de la CWDMencione que solo está registrado
Windows
pero creo que funciona perfectamente en otros sistemas operativos [Linux,MacOs,Solaris
] :).Tenía 2
.jar
archivos en el mismo directorio. Quería que desde un.jar
archivo comenzara el otro.jar
archivo que está en el mismo directorio.El problema es que cuando lo inicia desde el
cmd
directorio actual essystem32
.;][[;'57f2g34g87-8+9-09!2#@!$%^^&()
o()%&$%^@#
funciona bien.ProcessBuilder
el siguiente a continuación:🍂 ..
🍂
getBasePathForClass(Class<?> classs)
:fuente
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. Podría solucionar este problema iniciando un archivo Java
-D
y definiendo una variable para contener la informaciónAlgo como
Eso no está del todo bien, pero entiendes la idea. Entonces
System.getProperty("com.mycompany.workingDir")
...fuente
suponga que está intentando ejecutar su proyecto dentro de eclipse, o netbean o solo desde la línea de comandos. He escrito un método para arreglarlo
Para usar, en cualquier lugar donde desee obtener la ruta base para leer el archivo, puede pasar su clase de ancla al método anterior, el resultado puede ser lo que necesita: D
Mejor,
fuente
Ninguna de las respuestas publicadas aquí funcionó para mí. Esto es lo que funcionó:
Editar: La versión final en mi código:
fuente
Esta es mi bala de plata cuando aparece el momento de confusión. (Llámalo como lo primero en main). Quizás, por ejemplo, JVM se desliza para ser una versión diferente por IDE. Esta función estática busca el PID del proceso actual y abre VisualVM en ese pid. La confusión se detiene allí porque lo quieres todo y lo obtienes ...
fuente
System.getProperty("java.class.path")
fuente
este es el nombre del directorio actual
esta es la ruta actual del directorio
fuente