Как получить путь классу java?
Имею некий обучавшийся проект, где использую большое количество пакетов. Один пакет — это одна особенность языка (например, GUI, IO, Celection, и тд.). В проекте используются внешние ресурсы на ввод и вывод (jpeg, mp3, txt и тд.). Указываю путь к файлу подобным образом – nameFile = “file.txt” . Выходить что все файлы из разных пакетов выводят файл в корень проекта. Я хочу, что все выходные файлы выводились в пакет, где лежит класс. Чтобы я мог использовать одно и то же имя, не перезаписывая файл. Как мне получить относительный путь к классу, чтобы подписать этот путь к ресурсу?
Отслеживать
2,761 1 1 золотой знак 13 13 серебряных знаков 31 31 бронзовый знак
задан 21 июн 2017 в 16:13
227 2 2 серебряных знака 9 9 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Для получения директории, в которой находится класс, можно использовать такой код:
File currentClass = new File(URLDecoder.decode(ВашКласс.class .getProtectionDomain() .getCodeSource() .getLocation() .getPath(), "UTF-8")); String classDirectory = currentClass.getParent();
Лично я использую такую конструкцию с такими классами и распространяю по всему проекту, если проект завязан на работе с файлами:
public interface ApplicationPathManager
public class DefaultPathManager implements ApplicationPathManager < private String mApplicationDatabaseDirectory; private String mApplicationDataDirectory; private String mApplicationTempDirectory; private String mApplicationDirectory; public DefaultPathManager(String applicationDirectory) < this.mApplicationDirectory = applicationDirectory; this.mApplicationDatabaseDirectory = applicationDirectory + File.separatorChar + "database"; this.mApplicationDataDirectory = applicationDirectory + File.separatorChar + "data"; this.mApplicationTempDirectory = applicationDirectory + File.separatorChar + "temp"; >@Override public String getApplicationDatabaseDirectory() < return mApplicationDatabaseDirectory; >@Override public String getApplicationDataDirectory() < return mApplicationDataDirectory; >@Override public String getApplicationTempDirectory() < return mApplicationTempDirectory; >@Override public String getApplicationDirectory() < return mApplicationDirectory; >>
File currentClass = new File(URLDecoder.decode(OSLoaderApplication.class .getProtectionDomain() .getCodeSource() .getLocation() .getPath(), "UTF-8")); String jarDirectory = currentClass.getParent(); mApplicationPathManager = new DefaultPathManager(jarDirectory);
Как прописать путь до Java в исполняемом файле .sh
Добрый день форумчане, на Ubuntu 20.04 есть приложение которое использует Java 8, запускается оно через файл start.sh в котором прописаны конфиги, на самой машине пришла необходимость по умолчанию использовать Java 16. Теперь приложение которое использует Java 8 по умолчанию обращается через Java 16, как правильно в файле start.sh прописать чтобы это приложение использовало Java 8?
P/S Погуглив везде рассказывают о том как установить определённую Java по умолчанию или для определённого пользователя.

Mooks
15.07.21 11:37:46 MSK

Ты можешь напрямую дёргать бинарь java:
#!/bin/sh /usr/local/openjdk8/bin/java -jar ./path/to/your.jar $*
Пути поправишь как надо, в Ubuntu они другие.
mord0d ★★★★★
( 15.07.21 11:41:14 MSK )

iZEN ★★★★★
( 15.07.21 11:46:06 MSK )
Ответ на: комментарий от iZEN 15.07.21 11:46:06 MSK

Разве эта переменная не для обёртки-«переключателя» java?
mord0d ★★★★★
( 15.07.21 12:25:49 MSK )
Стандартов тут нет, поэтому универсальный ответ — изучай файл start.sh и разбирайся, как там устроен поиск java.
Обычно используют JAVA_HOME, если он не задан, то ищут java в $PATH . Поэтому для надёжности можно сделать так:
export JAVA_HOME="xxx" PATH="$JAVA_HOME/bin":$PATH ./start.sh
Скорей всего этого хватит. Может быть и одного из этих пунктов хватит.
Legioner ★★★★★
( 15.07.21 13:25:59 MSK )
У меня установлена Java 8. С ней падает лаунчер Minecraft на процессорах AMD Athlon II, Phenom II и AMD FX. Падает с ошибкой Webkit, а вернее библиотеки из состава Java, реализующей отображение веб-контента.
То же самое с Java 7. Только с Java 6 лаунчер нормально работает.
Я запускаю его так:
#!/bin/sh /home/zenitur/bin/jre1.6.0_45/bin/java -jar /home/zenitur/bin/launcher.jar
А сама игра запускается с Java 8 (можно в настройках профиля указать путь к Java 8, но по-моему там изначально так и было).
ZenitharChampion ★★★★★
( 15.07.21 13:49:14 MSK )

Просто замени в скрипте путь к бинарнику Java, укажи конкретно путь к Java 8.
Kron4ek ★★★★★
( 15.07.21 13:51:20 MSK )
Ответ на: комментарий от Kron4ek 15.07.21 13:51:20 MSK

Дак в том то и вопрос поста, как правильно это прописать)
Mooks
( 15.07.21 13:59:06 MSK ) автор топика
Ответ на: комментарий от Mooks 15.07.21 13:59:06 MSK

В скрипте, скорее всего, просто бинарник «java» вызывается. Заменяшь «java» на «/usr/lib/jvm/java-8-openjdk/jre/bin/java», или где у тебя там Java 8 лежит. Готово.
Kron4ek ★★★★★
( 15.07.21 14:13:59 MSK )
Ответ на: комментарий от Legioner 15.07.21 13:25:59 MSK

Так вроде получилось, благодарю!
Как найти, где JDK установлен на моем компьютере Windows?
При запуске Java -version в cmd он отображает версию как «1.6.xx». Чтобы найти местоположение этого SDK на моем компьютере, я попытался использовать echo %JAVA_HOME% , но он показывает только «JAVA_HOME» (так как в переменных среды нет JAVA_PATH).
ОТВЕТЫ
Ответ 1
Если вы используете Linux/Unix/Mac OS X:
$ which java
Должно вывести точное местоположение.
После этого вы можете сами установить переменную среды JAVA_HOME .
В моем компьютере (Mac OS X — Snow Leopard):
$ which java /usr/bin/java $ ls -l /usr/bin/java lrwxr-xr-x 1 root wheel 74 Nov 7 07:59 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
Если вы используете Windows:
c:\> for %i in (java.exe) do @echo. %~$PATH:i
Ответ 2
Windows > Пуск > cmd >
C:> for %i in (javac.exe) do @echo. %~$PATH:i
Если у вас установлен JDK, отображается Путь,
например: C:\Program Files\Java\jdk1.6.0_30\bin\javac.exe
Ответ 3
В Windows в командной строке
Ответ 4
Установщик Java помещает несколько файлов в папку% WinDir%\System32 (java.exe, javaws.exe и некоторые другие). Когда вы вводите java.exe в командной строке или создаете процесс без полного пути, Windows запускает их как последнее средство, если они отсутствуют в папках% PATH%.
Вы можете найти все версии Java, установленные в реестре. Взгляните на HKLM\SOFTWARE\JavaSoft\Java Runtime Environment и HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment для 32-разрядной Java на 64-битной Windows.
Вот как сама Java обнаруживает разные версии. И поэтому и 32-битная, и 64-битная версия могут сосуществовать и прекрасно работать, не мешая.
Ответ 5
В окнах по умолчанию: C:\Program Files\Java\jdk1.6.0_14 (где числа могут отличаться, поскольку они являются версией).
Ответ 6
Обычная и простая на платформах Windows:
, где java
Ответ 7
Пакет script ниже распечатает существующую стандартную JRE. Его можно легко изменить, чтобы найти версию JDK, установленную путем замены Java Runtime Environment Java Development Kit.
@echo off setlocal ::- Get the Java Version set KEY="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment" set VALUE=CurrentVersion reg query %KEY% /v %VALUE% 2>nul || ( echo JRE not installed exit /b 1 ) set JRE_VERSION= for /f "tokens=2,*" %%a in ('reg query %KEY% /v %VALUE% ^| findstr %VALUE%') do ( set JRE_VERSION=%%b ) echo JRE VERSION: %JRE_VERSION% ::- Get the JavaHome set KEY="HKLM\SOFTWARE\JavaSoft\Java Runtime Environment\%JRE_VERSION%" set VALUE=JavaHome reg query %KEY% /v %VALUE% 2>nul || ( echo JavaHome not installed exit /b 1 ) set JAVAHOME= for /f "tokens=2,*" %%a in ('reg query %KEY% /v %VALUE% ^| findstr %VALUE%') do ( set JAVAHOME=%%b ) echo JavaHome: %JAVAHOME% endlocal
Ответ 8
Подробнее о Windows. переменная java.home не всегда совпадает с местом запуска исполняемого бина.
Как говорит Denis The Menace, установщик помещает файлы Java в Program Files, а также java.exe в System32. Ничего не связано с Java на пути java -version. Однако, когда программа PeterMmm запущена, она сообщает значение Program Files как java.home, это не так (Java там установлен), но фактический исполняемый файл находится в System32.
Один из способов поиска местоположения двоичного файла java.exe, добавьте следующую строку в код PeterMmm, чтобы программа продолжалась дольше:
trycatch(Exception e) <>
Скомпилируйте и запустите его, затем найдите местоположение изображения java.exe. Например. в Windows 7 откройте диспетчер задач, найдите запись java.exe, щелкните правой кнопкой мыши и выберите «открыть местоположение файла», это откроет точное местоположение двоичного файла Java. В этом случае это будет System32.
Ответ 9
В командной строке Windows просто введите:
set java_home
Или, если вам не нравится командная среда, вы можете проверить ее:
Меню «Пуск» > «Компьютер» > «Свойства системы» > «Дополнительные свойства системы». Затем откройте вкладку «Дополнительно» > «Переменные среды» и в системной переменной попытайтесь найти JAVA_HOME.

Ответ 10
Запустите эту программу из командной строки:
// File: Main.java public class Main < public static void main(String[] args) < System.out.println(System.getProperty("java.home")); >> $ javac Main.java $ java Main
Ответ 11
В Windows вы можете использовать
C:>dir /b /s java.exe
чтобы напечатать полный путь каждого «java.exe» на вашем диске C:, независимо от того, находятся ли они в вашей переменной среды PATH.
Ответ 12
Пробовали ли вы просматривать%% PATH%. Это то, что Windows использует для поиска любого исполняемого файла.
Ответ 13
Просто выполните команду set в командной строке. Затем вы увидите все переменные окружения, которые вы установили.
Или если в Unix вы можете упростить его:
$ set | grep "JAVA_HOME"
Ответ 14
Это конкретная ОС. В Unix:
which java
отобразит путь к исполняемому файлу. Я не знаю эквивалента Windows, но там обычно есть папка bin для установки JDK в системе PATH :
echo %PATH%
Ответ 15
Ни один из этих ответов не подходит для Linux, если вы ищете дом, который включает в себя поддиры, такие как: bin, docs, include, jre, lib и т.д.
В Ubuntu для openjdk1.8.0 это находится в: /usr/lib/jvm/java-1.8.0-openjdk-amd64
и вы можете использовать его для JAVA_HOME , так как вы сможете находить заголовки, если вы создадите исходные файлы JNI. Хотя true which java предоставит двоичный путь, это не настоящий JDK home.
Ответ 16
Один вкладыш Powershell:
$p='HKLM:\SOFTWARE\JavaSoft\Java Development Kit'; $v=(gp $p).CurrentVersion; (gp $p/$v).JavaHome
Ответ 17
В Windows 10 вы можете узнать путь, выбрав «Панель управления» > «Java». На панели, которая отображается, вы можете найти путь, как показано на скриншоте ниже. В панели управления Java перейдите на вкладку «Java», а затем нажмите кнопку «Просмотр» в разделе «Просмотр и управление версиями и настройками Java Runtime для приложений и апплетов Java».
Это должно работать на Windows 7 и, возможно, на других последних версиях Windows.

Ответ 18
#!/bin/bash if [[ $(which $/bin/java) ]]; then exe="$/bin/java" elif [[ $(which java) ]]; then exe="java" else echo "Java environment is not detected." exit 1 fi $ -version
@echo off if "%JAVA_HOME%" == "" goto nojavahome echo Using JAVA_HOME : %JAVA_HOME% "%JAVA_HOME%/bin/java.exe" -version goto exit :nojavahome echo The JAVA_HOME environment variable is not defined correctly echo This environment variable is needed to run this program. goto exit :exit
Эта ссылка может помочь объяснить, как найти исполняемый файл java из bash: http://srcode.org/2014/05/07/detect-java-executable/
Ответ 19
set "JAVA_HOME"
Как найти расположение JDK на компьютере с операционной системой Windows
Ситуация, когда требуется найти, где именно на компьютере установлен JDK (Java Development Kit), является типичной для новичков, которые только начинают изучать Java. Например, это может потребоваться для настройки среды разработки или для проверки версии установленного JDK.
Обычно для определения местоположения JDK используется системная переменная JAVAHOME, которая должна указывать на директорию установки JDK. Для проверки этого можно воспользоваться командной строкой и командой echo %JAVA_HOME% . Однако, если эта переменная не была настроена при установке JDK, команда вернет лишь ‘JAVAHOME’.
Итак, как же определить местоположение JDK на компьютере под управлением Windows? Для этого есть несколько способов.
1. Использование командной строки
Первый и самый простой способ — это использование команды where java в командной строке. Эта команда вернет путь к исполняемому файлу java.exe, который обычно расположен в директории установки JDK.
2. Использование реестра Windows
Если первый способ не работает, можно воспользоваться редактором реестра Windows. Для этого необходимо открыть редактор (вызвать команду regedit в командной строке), и перейти по следующему пути: HKEY_LOCAL_MACHINE -> SOFTWARE -> JavaSoft -> Java Development Kit . Здесь в подразделе с версией JDK будет ключ «JavaHome», который указывает на директорию установки JDK.
3. Поиск в директории «Программы»
Есть и третий способ для тех, кому не по душе работать с командной строкой и реестром. Можно просто открыть директорию «Программы» на системном диске и вручную найти там папку с установленным JDK.
Таким образом, есть несколько способов определить местоположение JDK на компьютере с Windows. Несмотря на то, что это может показаться сложной задачей для новичков, с некоторой практикой становится ясно, что это довольно просто.