Col*_*747 3 java reflection package
我想从一个单独的Java项目中获取所有包名称,我最好如何使用反射在Java中执行此操作?
我已将项目导入到构建路径中,并且我尝试使用下面的代码来获取包名称.
Package[] pack = Package.getPackages();
编辑:我没有使用jar文件,我刚刚导入了项目,因为它将在同一个目录中.我只需要我创建的包,特别是以某个目录开头的包.
你真的无法通过使用知道库中的每个包名,getPackages()因为它只列出类加载器已知的包名.这意味着如果尚未从特定包加载类,则列表中将不存在该类.
使用zip文件处理例程打开jar文件,并按目录名读出包.使用此技术,您将发现所有包名称,甚至是那些尚未"使用"的包名称.基本上,包含.class文件的任何路径都是"包名".
----编辑为进一步的细节表明没有使用JAR文件---
既然你没有使用JAR文件(为什么不呢?它们真的很棒!),你将不得不扫描目录.要"查找"目录,您需要切断类路径.获取类路径的方法是:
String classpath = System.getProperty("java.class.path", null);
Run Code Online (Sandbox Code Playgroud)
然后搜索每个"起始点"下面包含.class文件的所有目录.一旦掌握了所有这些,就拥有了所有的软件包.
再说一次,只要问类加载器就不可能知道所有的包,除非你能以某种方式保证类加载器已经加载了所有的类(它通常不会加载).