假如我有一个类,绝对路径是D:\com\csdn\Test.class。
我怎样才能获取到这个类的全称,也就是com.csdn.Test。
我最终想要的是Test.class 的Class对象。
根据绝对路径,用正则表达式得到全称,再用反射得到对象。
http://blog.csdn.net/appleprince88/article/details/11599805
一个类的所有信息全都保存在class文件内,从class文件中解析类名是肯定可行的。
有一个办法就是从文件头开始解析,魔数、版本号、常量池计数器、第一个常量、第二个常量,……
有时候第二个常量就是你想要的类的全限定名了,但是无法保证,因为谁知道常量是不是这么排序的呢。
稳妥的办法,就是跳过常量池,接下来就能确切地知道本类的类名存储在第几个常量里了,但问题是正确地读取常量池是个挺复杂的问题啊。
推荐个我很喜欢的博客,想深入了解class文件的话可以好好读读:class文件基本组织结构
所以不推荐这个方法。
推荐拿别人写好的代码来做这个事情,刚刚去GitHub上找了一下,有个叫做ClassAnalyzer的项目,可以满足你的需求:
https://github.com/tinylcy/ClassAnalyzer
https://www.oschina.net/code/snippet_2273579_46909
欢迎采纳
使用java的reflection,如果已经知道要使用类的路径,就知道该类所属包。
直接Classloader的loadClass方法,参数为(该类的包.类)
try {
ClassLoader loader = ClassLoader.getSystemClassLoader();
Class clazz = loader.loadClass("com.csdn.Test");
System.out.println(clazz.getName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
输出