Получение текущего имени класса, включая пакет


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

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

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

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

изменить: Вот объяснение, взятое из описания упражнения

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

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

3 63

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 для получения дополнительной информации.

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

String fqn = YourClass.class.getName();

но для этого нужно прочитать путь к классу ресурс. Так что используйте

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