Получение текущего имени класса, включая пакет
Я работаю над проектом, и одно требование заключается в том, что если второй аргумент для основного метода начинается с '/' (для linux), он должен рассматривать его как абсолютный путь (не проблема), но если он не начинается с'/', он должен получить текущий рабочий путь класса и добавить к нему данный аргумент.
Я могу получить имя класса несколькими способами: System.getProperty("java.class.path")
,new File(".")
и getCanonicalPath()
и так далее..
проблема в том, что это дает мне только каталог, в котором пакеты хранятся-т. е. если у меня есть класс, хранящийся в ".../project / this/is/package/name", он только даст мне "/ project / " и игнорирует имя пакета, где фактическое .файлы классов есть.
какие предложения?
изменить: Вот объяснение, взятое из описания упражнения
sourcedir может быть абсолютным (начиная с"/") или относительно того, где мы запускаем программу из
sourcedir является заданным аргументом для основной метод. как я могу найти этот путь?
3 ответа:
использовать
this.getClass().getCanonicalName()
чтобы получить полное имя класса.обратите внимание, что имя пакета / класса ("a.b.C") отличается от пути .файлы классов (a/b/C.class), и что использование имени пакета / имени класса для получения пути обычно является плохой практикой. Наборы файлов / пакетов классов могут находиться в нескольких разных путях классов, которые могут быть каталогами или файлами jar.
есть класс,
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 для получения дополнительной информации.