рабочий каталог пользователя: XP vs Vista - PullRequest
6 голосов
/ 11 января 2012

У меня есть приложение для настольного компьютера Java, которое я написал. Во время выполнения я создаю папки и файлы с именем пути по умолчанию, определенным в системе.

Java.io.files четко заявляет: By default the classes in the java.io package always resolve relative pathnames against the current user directory. This directory is named by the system property user.dir, and is typically the directory in which the Java virtual machine was invoked.

Кроме того, я использую IzPack для установки и создания ярлыков.

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

Но когда я проверяю это на компьютере с Vista, папки и файлы создаются на рабочем столе! даже если Jar находится в правильном месте (c: \ программные файлы .. и т. д.).

Я хочу, чтобы эти файлы создавались в той же папке, в которой находится Jar, и, скорее всего, не на рабочем столе.

Может кто-нибудь подсказать мне, что здесь происходит?

1 Ответ

1 голос
/ 11 января 2012

Это связано с тем, что в Vista / Seven запись в папку Program Files требует административного вмешательства, поэтому JVM ищет следующий доступный для записи каталог в качестве запасного варианта: рабочий стол (или каталог пользовательских документов).Вы можете легко определить домашний каталог пользователя унифицированным образом на всех ОС, однако это гораздо лучше, чем просто позволить JVM выбрать - надеюсь - разумное местоположение.

Так как это известная ошибка для JVM в Windows, если это не помогает, резервным вариантом является проверка системной переменной среды USERPROFILE , которая должна указывать на правильную домашнюю папку пользователя:

String userHome = System.getenv("USERPROFILE");
...