преобразовать имя пакета в путь

Я боролся с этой ошибкой только потому, что один из моих class library проектов was set acceddentaly был консольным приложением

, поэтому убедитесь, что ваши проекты библиотеки классов являются библиотекой классов в типе Output

13
задан vaxquis 27 September 2016 в 04:34
поделиться

3 ответа

Я не уверен, что это ответит на ваш вопрос, поэтому я сделаю все возможное:

package de.xyz;

class PathForClass {
    public static void main( String [] args ) {
        System.out.println( 
            PathForClass.class.getResource( "PathForClass.class" ) 
        );
    }
}

Что при компиляции и запуске дает:

C:\Users\Oscar\code>javac -d . PathForClass.java

C:\Users\Oscar\code>java -cp . de.xyz.PathForClass
file:/C:/Users/Oscar/code/de/xyz/PathForClass.class

Таким образом, вы можете немного изменить вызовы и укажите путь по своему усмотрению:

package de.xyz;

class PathForClass {
    public static void main( String [] args ) {
        String currentDir  = new java.io.File(".").toURI().toString();
        String pathToClass = PathForClass.class.getResource( "PathForClass.class" ).toString();
        System.out.println( pathToClass.substring( currentDir.length() - 2  )); // -2 to get rid of the /./ at the end of the current dir
    }
}

C:\Users\Oscar\code>java -cp . de.xyz.PathForClass
de/xyz/PathForClass.class

Имейте в виду, что это будет работать только тогда, когда классы хранятся в каталогах, для jar-файлов вам придется немного изменить его ( if (pathToClass.startsWith (" jar ")) {//etc………………………………………………………………………………………………………………………………………………………………………………………. что для de.xyz.MyClass существует файл de / xyz / MyClass.class (как показано в примере jar)

Надеюсь, вы сочтете это полезным.

9
ответ дан 1 December 2019 в 19:02
поделиться

Вот так:

String path = MyClass.class.getName().replace(".", "/") + ".java";

Но обратите внимание, что иногда имена классов аннотируются (например, внутренние классы и т. Д.). Подробнее здесь .

Если вы начинаете с экземпляра класса (возможно, this внутри одного из методов класса), вы можете получить класс через instance .getClass () . Например:

private String getPathToThis() {
    return this.getClass().getName().replace(".", "/") + ".java";
}

Конечно, они будут относиться к некоторой базе (каталогу или банке) в пути к классам ...

23
ответ дан 1 December 2019 в 19:02
поделиться

Попробуйте

this.getClass().getPackage().getName();
1
ответ дан 1 December 2019 в 19:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: