Получите путь приложения

Незнание структуры вашего JSON немного усложняет эту проблему, но ее все же можно решить. У меня возникла идея рекурсивного поиска по словарю

extension Dictionary
{
    mutating func updateValueRecursively(forKey key : Key, newValue: Value) -> Bool
    {
        if keys.contains(key)
        {
            self[key] = newValue
            return true
        }
        for (_, value) in enumerated()
        {
            if var dict = value.value as? Dictionary<Key, Value> {
                if dict.updateValueRecursively(forKey: value.key, newValue: newValue), let newDict = dict as? Value {
                    self[value.key] = newDict
                    return true
                }
            }
        }
        return false
    }
}

Конечно, сначала вам нужно превратить строку JSON в словарь

var dict : Dictionary<String : Any>
if let data = jsonString.data(using: .utf8) {
do {
    dict=  try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
} catch {
    print(error.localizedDescription)
}
.
79
задан 2 revs 20 October 2008 в 12:22
поделиться

3 ответа

Какао Objective C (Mac OS X, я не знаю для специфик iPhone):

NSString * applicationPath = [[NSBundle mainBundle] bundlePath];
5
ответ дан 24 November 2019 в 10:16
поделиться

В Java вызовы

System.getProperty("user.dir")

и

new java.io.File(".").getAbsolutePath();

возвратите текущий рабочий каталог.

Вызов к

getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

возвращает путь к файлу JAR, содержащему текущий класс или элемент ПУТИ К КЛАССУ (путь), который привел к текущему классу, если Вы работаете непосредственно от файловой системы.

Пример:

  1. Ваше приложение расположено в

     C:\MyJar.jar
    
  2. Откройте оболочку (cmd.exe) и cd к C:\test\subdirectory.

  3. Запустите приложение с помощью команды java -jar C:\MyJar.jar.

  4. Первые два вызова возвращают 'C:\test\subdirectory'; третий вызов возвращает 'C:\MyJar.jar'.

При выполнении от файловой системы, а не файла JAR, результатом будет путь к корню сгенерированных файлов класса, например

c:\eclipse\workspaces\YourProject\bin\

Путь не включает каталоги пакета для сгенерированных файлов класса.

Полный пример для получения каталога приложения без .jar имени файла или соответствующего пути к файлам класса при выполнении непосредственно от файловой системы (например, при отладке):

String applicationDir = getClass().getProtectionDomain().getCodeSource().getLocation().getPath(); 

if (applicationDir.endsWith(".jar"))
{
    applicationDir = new File(applicationDir).getParent();
}
// else we already have the correct answer
58
ответ дан 24 November 2019 в 10:16
поделиться

In Tcl

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

set path [info script]

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

set path [info nameofexecutable]

Если вам нужен каталог чего-либо из этого, сделайте:

set dir [file dirname $path]

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

set dir [pwd]
2
ответ дан 24 November 2019 в 10:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: