Получить путь к приложению - PullRequest
79 голосов
/ 20 октября 2008

Я недавно искал, как получить каталог приложения на Java. Я наконец нашел ответ, но мне понадобилось на удивление много времени, потому что поиск такого общего термина не прост. Я думаю, что было бы неплохо составить список того, как этого добиться на нескольких языках.

Не стесняйтесь повышать / понижать голос, если вам (не) нравится идея, и , пожалуйста, внесите , если вам это нравится.

Пояснение:

Существует четкое различие между каталогом , который содержит исполняемый файл , и текущим рабочим каталогом (предоставленным pwd в Unix). Первоначально я был заинтересован в первом, но не стесняйтесь публиковать методы для определения последнего (уточняя, какой из них вы имеете в виду).

Ответы [ 21 ]

2 голосов
/ 21 февраля 2012

в Android его

getApplicationInfo().dataDir;

чтобы получить SD-карту, я использую

Environment.getExternalStorageDirectory();
Environment.getExternalStoragePublicDirectory(String type);

, где последний используется для хранения файла определенного типа (аудио / фильмы и т. Д.). У вас есть константы для этих строк в классе Environment.

По сути, для всего, что связано с приложением, используйте класс ApplicationInfo, а для всего, что связано с данными на SD-карте / во внешнем каталоге, используется класс Environment.

Документы: ApplicationInfo , Окружающая среда

2 голосов
/ 14 декабря 2011

В PHP :

<?php
  echo __DIR__; //same as dirname(__FILE__). will return the directory of the running script
  echo $_SERVER["DOCUMENT_ROOT"]; // will return the document root directory under which the current script is executing, as defined in the server's configuration file.
  echo getcwd(); //will return the current working directory (it may differ from the current script location).
?>
2 голосов
/ 11 августа 2010

In Tcl

Путь текущего скрипта:

set path [info script]

путь оболочки Tcl:

set path [info nameofexecutable]

Если вам нужен каталог любого из них, выполните:

set dir [file dirname $path]

Получить текущий (рабочий) каталог:

set dir [pwd]
2 голосов
/ 20 октября 2008

В bash команда 'pwd' возвращает текущий рабочий каталог.

2 голосов
/ 20 октября 2008

Unix

В Unix можно найти путь к исполняемому файлу, который был запущен с использованием переменных среды. Это , а не , обязательно абсолютный путь, поэтому вам нужно объединить текущий рабочий каталог (в оболочке: pwd) и / или переменную PATH со значением 0-го элемента среды .

В Unix это значение ограничено, поскольку исполняемый файл может, например, вызываться по символической ссылке, а для переменной среды используется только начальная ссылка. В общем, приложения на Unix не очень надежны, если используют их для каких-либо интересных вещей (например, для загрузки ресурсов). В Unix обычно используют жестко закодированные местоположения для вещей, например файл конфигурации в /etc, где указаны местоположения ресурсов.

1 голос
/ 06 сентября 2016

Java

На всех системах (Windows, Linux, Mac OS X) у меня работает только это:

public static File getApplicationDir() 
{
    URL url = ClassLoader.getSystemClassLoader().getResource(".");
    File applicationDir = null;
    try {
        applicationDir = new File(url.toURI());
    } catch(URISyntaxException e) {
        applicationDir = new File(url.getPath());
    }

    return applicationDir;
}
1 голос
/ 28 января 2015

Я выпустил https://github.com/gpakosz/whereami, который решает проблему в C и дает вам:

  • путь к текущему исполняемому файлу
  • путь к текущему модулю (отличается от пути к исполняемому файлу при вызове из общей библиотеки).

Используется GetModuleFileNameW в Windows, анализирует /proc/self/maps в Linux и Android и _NSGetExecutablePath или dladdr в Mac и iOS.

1 голос
/ 03 июля 2012

In cmd (оболочка командной строки Microsoft)

Вы можете получить имя скрипта с помощью% * (может быть относительно pwd)

Получает каталог скрипта:

set oldpwd=%cd%
cd %0\..
set app_dir=%pwd%
cd %oldpwd%

Если вы найдете какие-либо ошибки, которые вы будете. Тогда, пожалуйста, исправьте или прокомментируйте.

1 голос
/ 15 декабря 2008

В CFML есть две функции для доступа к пути скрипта:

getBaseTemplatePath()
getCurrentTemplatePath()

Вызов getBaseTemplatePath возвращает путь к «базовому» сценарию - то есть к тому, который был запрошен веб-сервером.
Вызов getCurrentTemplatePath возвращает путь к текущему сценарию, то есть к тому, который в данный момент выполняется.

Оба пути являются абсолютными и содержат полный каталог + имя файла сценария.

Чтобы определить только каталог, используйте функцию getDirectoryFromPath( ... ) по результатам.

Итак, чтобы определить местоположение каталога приложения, вы можете сделать:

<cfset Application.Paths.Root = getDirectoryFromPath( getCurrentTemplatePath() ) />

Внутри события onApplicationStart для вашего Application.cfc

1020 *
* <Ч />

Чтобы определить путь, по которому находится сервер приложений, на котором работает ваш механизм CFML, вы можете получить доступ к командам оболочки с помощью cfexecute, поэтому (учитывая вышеизложенные обсуждения pwd / etc) вы можете сделать:

Unix:

<cfexecute name="pwd"/>

для Windows, создайте pwd.bat, содержащий текст @cd, затем:

<cfexecute name="C:\docume~1\myuser\pwd.bat"/>

(Используйте атрибут variable cfexecute для сохранения значения вместо вывода на экран.)

1 голос
/ 20 октября 2008

in Ruby , следующий фрагмент возвращает путь к текущему исходному файлу:

path = File.dirname(__FILE__)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...