Иногда я получал SQLITE_ERROR: table `xyz` already exists
, когда я переименовал Тип. Попробуйте вернуть его к исходному имени или удалить его и заново создать его из диспетчера контента.
Нет надежного способа сделать это на чистой Java. Установка свойства user.dir
через System.setProperty ()
или java -Duser.dir = ...
похоже, влияет на последующее создание файлов
, но не, например, FileOutputStreams
.
Конструктор File (родительская строка, дочерняя строка)
может помочь, если вы создаете укажите путь к каталогу отдельно от пути к файлу, чтобы упростить обмен.
Альтернативой является настройка сценария для запуска Java из другого каталога или использование собственного кода JNI , как предлагается ниже .
Соответствующая ошибка Sun была закрыта в 2008 году как "
Если вы запустите свою устаревшую программу с ProcessBuilder , вы сможете указать ее рабочий каталог .
Если я правильно понимаю, программа Java запускается с копии текущих переменных среды. Любые изменения через System.setProperty (String, String)
изменяют копию, а не исходные переменные среды. Не то чтобы это дает исчерпывающую причину того, почему Sun выбрала такое поведение, но, возможно, это проливает немного света ...
Рабочий каталог - это функция операционной системы (устанавливается при запуске процесса).
Почему бы вам просто не передать свое собственное свойство System ( -Dsomeprop = / my / path
) и не использовать его в своем коде в качестве родительского для вашего файла:
File f = new File ( System.getProperty("someprop"), myFilename)
Другой возможный ответ на этот вопрос может зависеть от причины, по которой вы открываете файл. Это файл свойств или файл, имеющий некоторую конфигурацию, относящуюся к вашему приложению?
Если это так, вы можете попробовать загрузить файл через загрузчик пути к классам, таким образом вы сможете загрузить любой файл, к которому Java имеет доступ.
Более разумный / простой способ здесь - просто изменить код, чтобы вместо открытия файла предполагать, что он существует в текущем рабочем каталоге (я предполагаю, что вы делаете что-то вроде new File ("blah.txt")
, просто создайте путь к файлу самостоятельно.
Позвольте пользователю пройти в базовый каталог, прочитать его из файла конфигурации, вернуться к пользователю . dir
, если другие свойства не могут быть найдены и т. д. Но гораздо проще улучшить логику в вашей программе, чем изменить способ работы переменных среды.