Как получить текущее имя класса, включая имя пакета в Java?
Я работаю над проектом, и одно требование заключается в том, что если второй аргумент для метода main начинается с " /
" (для linux), он должен рассматривать его как абсолютный путь (не проблема), но если он не начинается с " /
", он должен получить текущий рабочий путь класса и добавить к нему заданный аргумент.
Я могу получить имя класса несколькими способами: System.getProperty("java.class.path")
, new File(".")
И getCanonicalPath()
, и так далее...
Проблема в том, что это дает мне только каталог, в котором хранятся пакеты - то есть, если у меня есть класс, хранящийся в " .../project/this/is/package/name
", это даст мне только " /project/
"и игнорирует имя пакета, в котором .class files
фактические .class files
.
Какие-либо предложения?
РЕДАКТИРОВАТЬ: Вот объяснение, взятое из описания упражнения
sourcedir может быть либо абсолютным (начиная с "/"), либо относительно того, откуда мы запускаем программу
sourcedir - это заданный аргумент для основного метода. как я могу найти этот путь?
Ответы
Ответ 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()
чтобы получить только имя класса.