Как получить текущий каталог под Linux
От: Аноним  
Дата: 13.06.07 07:50
Оценка:
Собственно как получить каталог из которого запущена программа.
Под виндой System.getProperty("user.dir") нормально возвращает директорию из которой запущен программа.
А как этот каталог получить под Linux, мне он возвращает папку пользователя(это в случае когда
запуск jar'а прописан для оболочки). Если под консолью запускать предварительно перейдя в каталог программы то тоже все нормально.
А как это сделать просто по кликам на jar?
Re: Как получить текущий каталог под Linux
От: aefimov Россия
Дата: 13.06.07 08:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Собственно как получить каталог из которого запущена программа.

А>Под виндой System.getProperty("user.dir") нормально возвращает директорию из которой запущен программа.
Не правда, user.home — это, как ни странно, User Home Directory. На винде она соответсвует переменной окружения %USERPROFILE% и %HOMEPATH%.

А>А как этот каталог получить под Linux, мне он возвращает папку пользователя(это в случае когда

А> запуск jar'а прописан для оболочки). Если под консолью запускать предварительно перейдя в каталог программы то тоже все нормально.

Вообще, всю жизнь работало так:
String cd = new File(".").getAbsolutePath();
Re[2]: Как получить текущий каталог под Linux
От: Blazkowicz Россия  
Дата: 13.06.07 08:22
Оценка:
Здравствуйте, aefimov, Вы писали:

A>Вообще, всю жизнь работало так:

A>
A>String cd = new File(".").getAbsolutePath();
A>


new File(), по-моему, на user.dir и опирается.
Re[2]: Как получить текущий каталог под Linux
От: Аноним  
Дата: 13.06.07 08:35
Оценка:
Здравствуйте, aefimov, Вы писали:
А>>Под виндой System.getProperty("user.dir") нормально возвращает директорию из которой запущен программа.
A>Не правда, user.home — это, как ни странно, User Home Directory. На винде она соответсвует переменной окружения %USERPROFILE% и %HOMEPATH%.
Ну дак мне нужна не user.home, а user.dir

A>Вообще, всю жизнь работало так:

A>
A>String cd = new File(".").getAbsolutePath();
A>

Возвращает тоже самое что и System.getProperty("user.dir");
Нормально отрабатывает когда запускаю скриптом
примерно таким
cd /home/max/tesprog
java -jar TestProg.jar

то получаю /home/max/tesprog

а если запустить
java -jar '/home/max/tesprog/TestProg.jar'

то возвращает /home/max

В принципе все ничего можно писать и первым способом но как эта же проблема возникает и если
я зарегистрирую команду java -jar для jar-файлов в проводнике
Re[3]: Как получить текущий каталог под Linux
От: aefimov Россия
Дата: 13.06.07 08:39
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>new File(), по-моему, на user.dir и опирается.


Он опирается на FileSystem.getDefaultParentPath. Который указывает всегда на директорию из которой стартовали java. Чтобы он отсчитывался от ${user.home} это надо запускать java оттуда. Явного присутствия user.home в классе File нет.
Re[4]: Как получить текущий каталог под Linux
От: Blazkowicz Россия  
Дата: 13.06.07 08:44
Оценка:
Здравствуйте, aefimov, Вы писали:

A>Здравствуйте, Blazkowicz, Вы писали:


B>>new File(), по-моему, на user.dir и опирается.


A>Он опирается на FileSystem.getDefaultParentPath. Который указывает всегда на директорию из которой стартовали java. Чтобы он отсчитывался от ${user.home} это надо запускать java оттуда. Явного присутствия user.home в классе File нет.

1) user.home != user.dir
2) java.io.File
public String getAbsolutePath()

Returns the absolute pathname string of this abstract pathname.
If this abstract pathname is already absolute, then the pathname string is simply returned as if by the getPath method. If this abstract pathname is the empty abstract pathname then the pathname string of the current user directory, which is named by the system property user.dir, is returned. Otherwise this pathname is resolved in a system-dependent way. On UNIX systems, a relative pathname is made absolute by resolving it against the current user directory. On Microsoft Windows systems, a relative pathname is made absolute by resolving it against the current directory of the drive named by the pathname, if any; if not, it is resolved against the current user directory.
Returns:
The absolute pathname string denoting the same file or directory as this abstract pathname

Re[3]: Как получить текущий каталог под Linux
От: aefimov Россия
Дата: 13.06.07 08:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Ну дак мне нужна не user.home, а user.dir


Тьфу, туплю...

А>В принципе все ничего можно писать и первым способом но как эта же проблема возникает и если

А>я зарегистрирую команду java -jar для jar-файлов в проводнике

Фигня тут в том, что кликая на jarнике, вы передаете управление системе. И откуда эта система стартанет java, никому кроме самой сисетмы не известно. Закладываться на это не стоит. Ну или если очень хочется, можно попробывать прочитать окружения процесса на линуксе и на винде. Скорей всего эта директория передается в какой-то из переменных окружения.
Re: Как получить текущий каталог под Linux
От: dshe  
Дата: 13.06.07 08:51
Оценка: 3 (1) +2
Здравствуйте, Аноним, Вы писали:

А>Собственно как получить каталог из которого запущена программа.

А>Под виндой System.getProperty("user.dir") нормально возвращает директорию из которой запущен программа.
А>А как этот каталог получить под Linux, мне он возвращает папку пользователя(это в случае когда
А> запуск jar'а прописан для оболочки). Если под консолью запускать предварительно перейдя в каталог программы то тоже все нормально.
А>А как это сделать просто по кликам на jar?

Думаю, что под Linux'ом System.getProperty("user.dir") тоже возвращает текущую директорию. Другое дело, что текущая директория — это вещь иногда совершенно не предсказуемая (какая, например, текущая директория у апплета?). Чтобы текущая диретокрия была той, в которой находится jar, возможно, необходимо что-то подкрутить в оболочке (что там GNOME или KDE).

Как вариант, это смотреть не на текущую директорию, а именно ту, в которой находится jar. Подсказки:
Class.getProtectionDomain().getCodeSource().getLocation() или Class.getResource().
--
Дмитро
Re[5]: Как получить текущий каталог под Linux
От: aefimov Россия
Дата: 13.06.07 08:52
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>If this abstract pathname is already absolute, then the pathname string is simply returned as if by the getPath method. If this abstract pathname is the empty abstract pathname then the pathname string of the current user directory, which is named by the system property user.dir, is returned. Otherwise this pathname is resolved in a system-dependent way. On UNIX systems, a relative pathname is made absolute by resolving it against the current user directory. On Microsoft Windows systems, a relative pathname is made absolute by resolving it against the current directory of the drive named by the pathname, if any; if not, it is resolved against the current user directory.


Угу, эт я ступил в попыхах…
Re[2]: Как получить текущий каталог под Linux
От: techmax  
Дата: 13.06.07 09:54
Оценка:
Здравствуйте, dshe, Вы писали:

D>Здравствуйте, Аноним, Вы писали:

D>Думаю, что под Linux'ом System.getProperty("user.dir") тоже возвращает текущую директорию. Другое дело, что текущая директория — это вещь иногда совершенно не предсказуемая (какая, например, текущая директория у апплета?). Чтобы текущая диретокрия была той, в которой находится jar, возможно, необходимо что-то подкрутить в оболочке (что там GNOME или KDE).
Знать бы ще что подкрутить. Да и всем userам не объеяснишь что подкручивать

D>Как вариант, это смотреть не на текущую директорию, а именно ту, в которой находится jar. Подсказки:

D>Class.getProtectionDomain().getCodeSource().getLocation() или Class.getResource().
Спасибо. заработало
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.