我试图从外部路径读取所有已经编译的.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();
}
}
暂无答案!
目前还没有任何答案,快来回答吧!