package com.jsonde.util; import java.io.File; import java.io.IOException; import java.util.Enumeration; import java.util.HashSet; import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarFile; public class ClassUtils { public static final String CONSTRUCTOR_METHOD_NAME = "<init>"; public static final String STATIC_CONSTRUCTOR_METHOD_NAME = "<clinit>"; private static final String EMPTY_STRING = ""; public static String getFullyQualifiedName(String className) { if (null == className) return EMPTY_STRING; return className.replace('/', '.'); } public static String getInternalClassName(String className) { if (null == className) return EMPTY_STRING; return className.replace('.', '/'); } public static String convertClassNameToResourceName(String className) { if (null == className) return EMPTY_STRING; return className.replace('.', '/') + ".class"; } public static Set<String> getPackagesFromClassPath() throws IOException { String classPath = System.getProperty("java.class.path"); String pathSeparator = System.getProperty("path.separator"); Set<String> packages = new HashSet<String>(); for (String classPathElement : classPath.split(pathSeparator)) { System.out.println(classPathElement); File classPathFile = new File(classPathElement); if (classPathFile.exists()) { if (classPathFile.isDirectory()) { packages.addAll(getPackagesFromDirectory(classPathFile)); } else { JarFile jarFile = new JarFile(classPathFile, false); Enumeration<JarEntry> jarEntryEnumeration = jarFile.entries(); while (jarEntryEnumeration.hasMoreElements()) { JarEntry jarEntry = jarEntryEnumeration.nextElement(); String jarEntryName = jarEntry.getName(); if (jarEntryName.endsWith(".class")) { if (jarEntryName.contains("/")) { String packageName = jarEntryName. substring(0, jarEntryName.lastIndexOf("/")). replaceAll("/", "."); packages.add(packageName); } else { String packageName = jarEntryName. substring(0, jarEntryName.length() - ".class".length()); packages.add(packageName); } } } } } } return packages; } private static Set<String> getPackagesFromDirectory(File directory) { return getPackagesFromDirectory(directory, directory); } private static Set<String> getPackagesFromDirectory(File rootDirectory, File directory) { Set<String> packages = new HashSet<String>(); String rootDirectoryFileName = rootDirectory.getAbsolutePath(); for (File file : directory.listFiles()) { if (file.isDirectory()) { packages.addAll(getPackagesFromDirectory(rootDirectory, file)); } else if (file.getName().endsWith(".class")) { String directoryFileName = directory.getAbsolutePath(); String packageName = directoryFileName. substring(rootDirectoryFileName.length() + 1). replaceAll("/", "."); packages.add(packageName); } } return packages; } }