我有一个de.xyz.MyClass
课程,存储在de/xyz/MyClass.java
中。
如何从课程MyClass
本身获取此路径?
答案 0 :(得分:22)
像这样:
String path = MyClass.class.getName().replace(".", "/") + ".java";
但请注意,有时候会对类名进行注释(例如,内部类等)。更多here。
如果您从一个类的实例开始(可能是其中一个类的方法中的this
),您可以通过instance.getClass()
获取该类。例如:
private String getPathToThis() {
return this.getClass().getName().replace(".", "/") + ".java";
}
当然,这些将与classpath中的某个base(目录或jar)相关...
答案 1 :(得分:9)
我不确定你回答这个问题,所以我会尽力猜测:
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...
)
此外,类加载器并不总是使用文件系统,其中一些加载来自数据库,ldaps和几乎任何地方的文件,因此de.xyz.MyClass
存在de/xyz/MyClass.class
并不总是如此。文件(如jar示例所示)
我希望你觉得这很有用。
答案 2 :(得分:6)
有一个util class ==> org.springframework.util.ClassUtils。
ClassUtils.convertClassNameToResourcePath("de.xyz.MyClass");
答案 3 :(得分:2)
尝试
this.getClass().getPackage().getName();