Recientemente busqué cómo podía obtener el directorio de la aplicación en Java. Finalmente encontré la respuesta, pero he necesitado sorprendentemente mucho tiempo porque buscar un término tan genérico no es fácil. Creo que sería una buena idea compilar una lista de cómo lograr esto en varios idiomas.
No dude en votar a favor o en contra si (no) le gusta la idea y contribuya si le gusta.
Aclaración:
Hay una fina distinción entre el directorio que contiene el archivo ejecutable y el directorio de trabajo actual (dado por pwd
bajo Unix). Originalmente estaba interesado en el primero, pero siéntase libre de publicar métodos para determinar el segundo también (aclarando a cuál se refiere).
language-agnostic
path
Konrad Rudolph
fuente
fuente
Respuestas:
En Java las llamadas
y
devuelve el directorio de trabajo actual.
La llamada a
devuelve la ruta al archivo JAR que contiene la clase actual, o el elemento CLASSPATH (ruta) que produjo la clase actual si está ejecutando directamente desde el sistema de archivos.
Ejemplo:
Su aplicación se encuentra en
Abra el shell (cmd.exe) y el
cd
subdirectorio C: \ test \.Inicie la aplicación con el comando
java -jar C:\MyJar.jar
.Las dos primeras llamadas devuelven 'C: \ test \ subdirectory'; la tercera llamada devuelve 'C: \ MyJar.jar'.
Cuando se ejecuta desde un sistema de archivos en lugar de un archivo JAR, el resultado será la ruta a la raíz de los archivos de clase generados, por ejemplo
La ruta no incluye los directorios del paquete para los archivos de clase generados.
Un ejemplo completo para obtener el directorio de la aplicación sin el nombre de archivo .jar, o la ruta correspondiente a los archivos de clase si se ejecuta directamente desde el sistema de archivos (por ejemplo, al depurar):
fuente
Class.getResource()
.En .NET (C #, VB,…) , puede consultar la
Assembly
instancia actual por suLocation
. Sin embargo, esto tiene el nombre del archivo ejecutable adjunto. El siguiente código desinfecta la ruta (using System.IO
yusing System.Reflection
):Como alternativa, puede usar la información proporcionada por
AppDomain
para buscar ensamblados referenciados:VB permite otro acceso directo a través del
My
espacio de nombres:fuente
En Windows , utilice la función GetModuleFileName () de WinAPI . Pase NULL para que el identificador del módulo obtenga la ruta del módulo actual.
fuente
Pitón
Eso obtiene la ruta del módulo actual.
fuente
Objective-C Cocoa (Mac OS X, no sé las especificidades de iPhone):
fuente
En Java , hay dos formas de encontrar la ruta de la aplicación. Uno es emplear
System.getProperty
:Otra posibilidad es el uso de
java.io.File
:Otra posibilidad más usa la reflexión:
fuente
C:\Program Files\ExampleApp
se representa en forma de URL comofile:/C:/Program%20Files/ExampleApp
, para lo cual devuelve getPath ()"/C:/Program%20Files/ExampleApp"
, que obviamente no existe. La única forma correcta de convertir una URL en un archivo esnew File(url.toURI())
.En VB6, puede obtener la ruta de la aplicación utilizando la
App.Path
propiedad.Tenga en cuenta que esto no tendrá un final
\
EXCEPTO cuando la aplicación esté en la raíz de la unidad.En el IDE:
fuente
En .Net puedes usar
System.IO.Directory.GetCurrentDirectory
para obtener el directorio de trabajo actual de la aplicación, y en VB.NET específicamente puede usar
My.Application.Info.DirectoryPath
para obtener el directorio del exe.
fuente
Delphi
En aplicaciones de Windows:
En aplicaciones de consola:
Independientemente del idioma, el primer parámetro de la línea de comandos es el nombre del ejecutable completo:
fuente
Entorno de
tipo Libc In * nix (también Cygwin en Windows):
Ver página man
fuente
Unix
En Unix, uno puede encontrar la ruta al ejecutable que se inició usando las variables de entorno. Es no necesariamente una ruta absoluta, por lo que tendría que combinar el directorio de trabajo actual (en la cáscara:
pwd
) y / o variable PATH con el valor del elemento de orden 0 del medio ambiente.Sin embargo, el valor está limitado en Unix, ya que el ejecutable se puede llamar, por ejemplo, a través de un enlace simbólico, y solo se utiliza el enlace inicial para la variable de entorno. En general, las aplicaciones en Unix no son muy robustas si lo usan para algo interesante (como cargar recursos). En Unix, es común usar ubicaciones codificadas de forma rígida para las cosas, por ejemplo, un archivo de configuración en
/etc
el que se especifican las ubicaciones de los recursos.fuente
En bash , el comando 'pwd' devuelve el directorio de trabajo actual.
fuente
pwd
devuelve el directorio de trabajo actual que puede diferir de la ruta del script.En PHP :
fuente
en Android es
para obtener la tarjeta SD, uso
donde este último se utiliza para almacenar un tipo específico de archivo (audio / películas, etc.). Tiene constantes para estas cadenas en la clase Environment.
Básicamente, para cualquier cosa que tenga que ver con la aplicación, use la clase ApplicationInfo y para cualquier cosa que tenga que ver con los datos en la tarjeta SD / Directorio externo usando la clase Environment.
Documentos: ApplicationInfo , Environment
fuente
En Tcl
Ruta de la secuencia de comandos actual:
Ruta del shell de Tcl:
Si necesita el directorio de cualquiera de estos, haga:
Obtener directorio actual (de trabajo):
fuente
Java:
En todos los sistemas (Windows, Linux, Mac OS X) me funciona solo esto:
fuente
en Ruby , el siguiente fragmento devuelve la ruta del archivo fuente actual:
fuente
En CFML hay dos funciones para acceder a la ruta de un script:
Llamar a getBaseTemplatePath devuelve la ruta de la secuencia de comandos 'base', es decir, la que solicitó el servidor web.
Llamar a getCurrentTemplatePath devuelve la ruta del script actual, es decir, el que se está ejecutando actualmente.
Ambas rutas son absolutas y contienen el directorio completo + el nombre de archivo del script.
Para determinar solo el directorio, use la función
getDirectoryFromPath( ... )
en los resultados.Entonces, para determinar la ubicación del directorio de una aplicación, puede hacer:
Dentro del
onApplicationStart
evento para tuApplication.cfc
Para determinar la ruta donde se encuentra el servidor de aplicaciones que ejecuta su motor CFML, puede acceder a los comandos de shell con cfexecute, por lo que (teniendo en cuenta las discusiones anteriores sobre pwd / etc) puede hacer:
Unix:
para Windows, cree un
pwd.bat
texto que contenga@cd
, luego:(Utilice el
variable
atributo decfexecute
para almacenar el valor en lugar de enviarlo a la pantalla).fuente
En cmd (el shell de línea de comandos de Microsoft)
Puede obtener el nombre del script con% * (puede ser relativo a pwd)
Esto obtiene el directorio del script:
Si encuentra algún error, lo hará. Entonces, por favor, corrija o comente.
fuente
Lancé https://github.com/gpakosz/whereami que resuelve el problema en C y te da:
Se usa
GetModuleFileNameW
en Windows, analiza/proc/self/maps
en Linux y Android y usa_NSGetExecutablePath
odladdr
en Mac e iOS.fuente
Nota para responder "20 arriba con respecto a Mac OSX solamente: Si un ejecutable JAR se transforma en una" aplicación "a través de OSX JAR BUNDLER, entonces getClass (). GetProtectionDomain (). GetCodeSource (). GetLocation (); NO devolverá el directorio actual de la aplicación, pero agregará la estructura del directorio interno de la aplicación a la respuesta. Esta estructura interna de una aplicación es / theCurrentFolderWhereTheAppReside / Contents / Resources / Java / yourfile
Quizás este sea un pequeño error en Java. De todos modos, uno debe usar el método uno o dos para obtener la respuesta correcta, y ambos entregarán la respuesta correcta incluso si la aplicación se inicia, por ejemplo, a través de un acceso directo ubicado en una carpeta diferente o en el escritorio.
carl
SoundPimp.com
fuente