Изменение текущего рабочего каталога в Java?

Иногда я получал SQLITE_ERROR: table `xyz` already exists, когда я переименовал Тип. Попробуйте вернуть его к исходному имени или удалить его и заново создать его из диспетчера контента.

164
задан Nick 8 May 2009 в 14:54
поделиться

6 ответов

Нет надежного способа сделать это на чистой Java. Установка свойства user.dir через System.setProperty () или java -Duser.dir = ... похоже, влияет на последующее создание файлов , но не, например, FileOutputStreams .

Конструктор File (родительская строка, дочерняя строка) может помочь, если вы создаете укажите путь к каталогу отдельно от пути к файлу, чтобы упростить обмен.

Альтернативой является настройка сценария для запуска Java из другого каталога или использование собственного кода JNI , как предлагается ниже .

Соответствующая ошибка Sun была закрыта в 2008 году как "

143
ответ дан 23 November 2019 в 21:14
поделиться

Если вы запустите свою устаревшую программу с ProcessBuilder , вы сможете указать ее рабочий каталог .

37
ответ дан 23 November 2019 в 21:14
поделиться

Если я правильно понимаю, программа Java запускается с копии текущих переменных среды. Любые изменения через System.setProperty (String, String) изменяют копию, а не исходные переменные среды. Не то чтобы это дает исчерпывающую причину того, почему Sun выбрала такое поведение, но, возможно, это проливает немного света ...

11
ответ дан 23 November 2019 в 21:14
поделиться

Рабочий каталог - это функция операционной системы (устанавливается при запуске процесса). Почему бы вам просто не передать свое собственное свойство System ( -Dsomeprop = / my / path ) и не использовать его в своем коде в качестве родительского для вашего файла:

File f = new File ( System.getProperty("someprop"), myFilename)
5
ответ дан 23 November 2019 в 21:14
поделиться

Другой возможный ответ на этот вопрос может зависеть от причины, по которой вы открываете файл. Это файл свойств или файл, имеющий некоторую конфигурацию, относящуюся к вашему приложению?

Если это так, вы можете попробовать загрузить файл через загрузчик пути к классам, таким образом вы сможете загрузить любой файл, к которому Java имеет доступ.

0
ответ дан 23 November 2019 в 21:14
поделиться

Более разумный / простой способ здесь - просто изменить код, чтобы вместо открытия файла предполагать, что он существует в текущем рабочем каталоге (я предполагаю, что вы делаете что-то вроде new File ("blah.txt") , просто создайте путь к файлу самостоятельно.

Позвольте пользователю пройти в базовый каталог, прочитать его из файла конфигурации, вернуться к пользователю . dir , если другие свойства не могут быть найдены и т. д. Но гораздо проще улучшить логику в вашей программе, чем изменить способ работы переменных среды.

4
ответ дан 23 November 2019 в 21:14
поделиться
Другие вопросы по тегам:

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