T.J*_*der 23
像这样:
String path = MyClass.class.getName().replace(".", "/") + ".java";
Run Code Online (Sandbox Code Playgroud)
但请注意,有时候类名称是注释的(例如,内部类等).更多这里.
如果你从一个类的实例开始(也许this在类的一个方法中),你可以通过它来获取类instance.getClass().例如:
private String getPathToThis() {
return this.getClass().getName().replace(".", "/") + ".java";
}
Run Code Online (Sandbox Code Playgroud)
当然,这些将与classpath中的某个base(目录或jar)相关...
我不确定你回答这个问题,所以我会尽力猜测:
package de.xyz;
class PathForClass {
public static void main( String [] args ) {
System.out.println(
PathForClass.class.getResource( "PathForClass.class" )
);
}
}
Run Code Online (Sandbox Code Playgroud)
在编译和运行时给出:
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
Run Code Online (Sandbox Code Playgroud)
这样你可以修改一些调用并拥有你想要的路径:
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
Run Code Online (Sandbox Code Playgroud)
请记住,只有在类存储在目录中的情况下,对于jar,你必须稍微修改它(if( pathToClass.startsWith("jar")){ //etc...)
此外,类加载器并不总是与文件系统一起工作,其中一些加载来自数据库,ldaps和几乎任何地方的文件,因此对于de.xyz.MyClass存在de/xyz/MyClass.class 文件并不总是如此(如jar示例所示)
希望这个对你有帮助.
小智 6
有一个util class ==> org.springframework.util.ClassUtils.
ClassUtils.convertClassNameToResourcePath("de.xyz.MyClass");
Run Code Online (Sandbox Code Playgroud)
资料来源:https: //docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/ClassUtils.html
尝试
this.getClass().getPackage().getName();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30128 次 |
| 最近记录: |