列出java中给定路径中.class文件中的所有方法及其返回类型

7kqas0il  于 2021-06-27  发布在  Java
关注(0)|答案(0)|浏览(164)

我试图从外部路径读取所有已经编译的.class文件中的方法及其返回类型,以查看文件的结构。如果编译的文件在您的系统中或者可以导入(例如string.class),那么我们可以简单地调用这个方法并得到结果。但是对于外部编译的.class文件,有没有办法解决这个问题呢?编辑:我使用了urlclassloader的最新注解,但它在线程“main”java.lang.noclassdeffounderror:myclassfile(错误名称:a/b/myclassfile)中给出了异常

public class JavaMethodsNameGeneration {
    public static void main(String[] args) {
        URL classUrl;
        File file  = new File ("C:/Users/myPath");
        classUrl = file.toURI().toURL();
        URL[] classUrls = { classUrl };
        URLClassLoader ucl = new URLClassLoader(classUrls);
        Class myClass = ucl.loadClass("MyClassFile");
        System.out.println(generateMethodNameToFile(String.class));//Write the output string to file

    }
    public static String generateMethodNameToFile(Class className){

        Method[] methods = className.getMethods();
        StringBuilder stringBuilder = new StringBuilder();
        Arrays.stream(methods).forEach(method -> {
            stringBuilder.append(method.getName()).append("(");
            Class<?>[] parameterTypes = method.getParameterTypes();
            if(parameterTypes.length>0){
                Arrays.stream(parameterTypes).forEach(p->{
                    stringBuilder.append(p.getSimpleName()).append(",");
                });
            }
            else{
                stringBuilder.append(" ");
            }
            stringBuilder.setLength(Math.max(stringBuilder.length()-1,0));
            stringBuilder.append(")").append(" : ").append(method.getReturnType().equals(Void.class)?"void": method.getReturnType().getSimpleName());
            if(method.getExceptionTypes().length>0){
                stringBuilder.append(" throws ").append(Arrays.stream(method.getExceptionTypes()).map(Class::getSimpleName).collect(Collectors.joining(", ")));
            }
            stringBuilder.append(System.lineSeparator());
        });
        return stringBuilder.toString();
    }
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题