Подтвердить что ты не робот

Как получить текущее имя класса, включая имя пакета в Java?

Я работаю над проектом, и одно требование заключается в том, что если второй аргумент для метода main начинается с " / " (для linux), он должен рассматривать его как абсолютный путь (не проблема), но если он не начинается с " / ", он должен получить текущий рабочий путь класса и добавить к нему заданный аргумент.

Я могу получить имя класса несколькими способами: System.getProperty("java.class.path"), new File(".") И getCanonicalPath(), и так далее...

Проблема в том, что это дает мне только каталог, в котором хранятся пакеты - то есть, если у меня есть класс, хранящийся в " .../project/this/is/package/name ", это даст мне только " /project/ "и игнорирует имя пакета, в котором .class files фактические .class files.

Какие-либо предложения?

РЕДАКТИРОВАТЬ: Вот объяснение, взятое из описания упражнения

sourcedir может быть либо абсолютным (начиная с "/"), либо относительно того, откуда мы запускаем программу

sourcedir - это заданный аргумент для основного метода. как я могу найти этот путь?

4b9b3361

Ответ 1

Используйте this.getClass().getCanonicalName(), чтобы получить полное имя класса.

Обратите внимание, что имя пакета/класса ( "abC" ) отличается от пути файлов .class(a/b/C.class) и что использование имени пакета/класса для получения пути обычно плохая практика. Наборы файлов/пакетов класса могут быть в нескольких разных путях классов, которые могут быть каталогами или файлами jar.

Ответ 2

Существует класс Class, который может сделать это:

Class c = Class.forName("MyClass"); // if you want to specify a class
Class c = this.getClass();          // if you want to use the current class

System.out.println("Package: "+c.getPackage()+"\nClass: "+c.getSimpleName()+"\nFull Identifier: "+c.getName());

Если c представляет класс MyClass в пакете mypackage, то указанный выше код будет печатать:

Пакет: mypackage
Класс: MyClass
Полный идентификатор: mypackage.MyClass

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

Ответ 3

Полноценное имя определяется следующим образом:

String fqn = YourClass.class.getName();

Но вам нужно прочитать ресурс classpath. Поэтому используйте

InputStream in = YourClass.getResourceAsStream("resource.txt");

Ответ 4

используйте this.getClass().getName() чтобы получить packageName.className и используйте this.getClass().getSimpleName() чтобы получить только имя класса.