获取某个package 的所有类名 现在已经知道一个package名,我想知道这个包下的所有类名,请问怎么获取?最好带上代码。我查过java rtti的所有相关函数,没有这样的东西。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 前些天有个朋友问了类似的问题我帮他写了一段代码,你看看符合你的要求吗String packageName = "java.lang"; 换成你设定的包名///////////////////////////////////////////////////////import java.io.File;import java.io.FileInputStream;import java.io.FilenameFilter;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;/** * * @author ronny_zeng * */public class SearchClass {public static void main(String[] args) throws Exception {String classpath = System.getProperty("java.class.path");String[] all = classpath.split(";");String packageName = "java.lang";for(int i = 0;i<all.length;i++) {if(all[i].endsWith(".jar")) {findJar(all[i],packageName );} else {findFile(all[i],packageName );}}}/** * * @param path * @param packName * @throws Exception */public static void findFile(String path, String packName) throws Exception {File file = new File(path + "\\" + packName.replace('.', '\\'));System.out.println(file.getAbsolutePath());if (file.exists() && file.isDirectory()) {File[] classes = file.listFiles(new FilenameFilter() {public boolean accept(File dir, String name) {if (name.endsWith(".class")) {System.out.println(name);return true;}return false;}});System.out.println(classes.length);}}/** * */public static void findJar(String jar ,String packName) throws Exception {ZipInputStream in = new ZipInputStream(new FileInputStream(new File(jar)));ZipEntry ze = null;while ((ze = in.getNextEntry()) != null) {if(ze.getName().startsWith(packName.replace(".","/"))&&ze.getName().endsWith(".class")&&(ze.getName().lastIndexOf("/")==(packName.replace(".","/")+"/").lastIndexOf("/"))) {System.out.println(ze.getName());}}}} import java.io.File;import java.io.FileInputStream;import java.io.FilenameFilter;import java.util.zip.ZipEntry;import java.util.zip.ZipInputStream;/** * * @author ronny_zeng * */public class SearchClass { public static void main(String[] args) throws Exception { String classpath = System.getProperty("java.class.path"); String[] all = classpath.split(";"); String pack = "javax.swing"; long begin = System.currentTimeMillis(); for (int i = 0; i < all.length; i++) { all[i].trim(); if (all[i].endsWith(".jar")) { findJar(all[i], pack); } else { findFile(all[i], pack); } } // for findJar(System.getProperty("java.home")+"\\lib\\rt.jar", pack); System.out.println(" \nTotal Time : " + (System.currentTimeMillis() - begin) + " ms"); } /** * find class in flat file * @param path * @param packName * @throws Exception */ public static void findFile(String path, String packName) throws Exception { File file = new File(path + "\\" + packName.replace('.', '\\')); if (file.exists() && file.isDirectory()) { File[] classes = file.listFiles(new FilenameFilter() { public boolean accept(File dir, String name) { if (name.endsWith(".class")) { System.out.println(name); return true; } return false; } }); System.out.println(classes.length); } } /** * find class in jar * @param jar * @param packName * @throws Exception */ public static void findJar(String jar, String packName) throws Exception { ZipInputStream in = new ZipInputStream(new FileInputStream( new File(jar))); ZipEntry ze = null; while ((ze = in.getNextEntry()) != null) { if (ze.getName().startsWith(packName.replace(".", "/")) && ze.getName().endsWith(".class") && (ze.getName().lastIndexOf("/") == (packName.replace(".", "/") + "/").lastIndexOf("/"))) { System.out.println(ze.getName()); } } } }改进了一下 ClassLoader loader = Thread.currentThread().getContextClassLoader();return loader.getResource(packageResource).getFile().replaceAll("%20", " "); import java.awt.image.BufferedImage;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileReader;import java.io.FilterInputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.URL;import java.sql.Array;import java.util.ArrayList;import javax.imageio.ImageIO;public class FileUtil{ /** * read ascii file * */ public static StringBuffer readFile(String filename) { try { FileReader fr = new FileReader(filename); BufferedReader br = new BufferedReader(fr); StringBuffer recordBuf = new StringBuffer(); String record = null; while ((record = br.readLine()) != null) { recordBuf.append(record + "\n"); } br.close(); fr.close(); return recordBuf; } catch (Exception ex) { Log.debug("FileUtil.readFile(): " + ex.toString()); } return null; } /** * read byte file * */ public static byte[] readByteFile(String filename) { try { File file = new File(filename); byte[] data = new byte[(int) file.length()]; FileInputStream fis = new FileInputStream(file); fis.read(data); fis.close(); return data; } catch (Exception ex) { Log.debug("FileUtil.readByteFile(): " + ex.toString()); } return null; } /** * read byte file * */ public static BufferedImage readImageFile(String filename) { try { return ImageIO.read(new File(filename)); } catch (IOException ex) { Log.debug("FileUtil.readImageFile(): " + ex.toString()); } return null; } /** * read package resource * */ public static StringBuffer readPackageResource(String packageResource) { if (packageResource == null) return null; try { ClassLoader loader = Thread.currentThread().getContextClassLoader(); InputStream is = loader.getResourceAsStream(packageResource); BufferedReader bf = new BufferedReader(new InputStreamReader(is)); StringBuffer recordBuf = new StringBuffer(); String record = null; while ((record = bf.readLine()) != null) { recordBuf.append(record + "\n"); } bf.close(); is.close(); return recordBuf; } catch (Exception ex) { Log.debug("readPackageResource(): " + ex.toString()); ex.printStackTrace(); } return null; } /** * read package resource * */ public static byte[] readPackageByteResource(String packageResource) { if (packageResource == null) return null; try { //get data length ClassLoader loader = Thread.currentThread().getContextClassLoader(); InputStream is = loader.getResourceAsStream(packageResource); int length = 0; while (is.read() != -1) { length++; } is.close(); //read data byte[] data = new byte[length]; is = loader.getResourceAsStream(packageResource); is.read(data); is.close(); return data; } catch (Exception ex) { Log.debug("readPackageResource(): " + ex.toString()); ex.printStackTrace(); } return null; } /** * read package resource * */ public static BufferedImage readPackageImageResource(String packageResource) { if (packageResource == null) return null; try { ClassLoader loader = Thread.currentThread().getContextClassLoader(); return ImageIO.read(loader.getResource(packageResource)); } catch (IOException ex) { Log.debug("FileUtil.readPackageImageResource(): " + ex.toString()); } return null; } /** * get resource file path in package * @param packageResource package resource relative path * @return String package resource file path * */ public static String getPackageResourcePath(String packageResource) { if (packageResource == null) return null; if (packageResource.startsWith("\\") || packageResource.startsWith("/")) packageResource = packageResource.substring(1); if (packageResource.endsWith("\\") || packageResource.endsWith("/")) packageResource = packageResource.substring(0, packageResource.length() - 1); ClassLoader loader = Thread.currentThread().getContextClassLoader(); return loader.getResource(packageResource).getFile().replaceAll("%20", " "); } /** * get resource file path in package * @param packageResource package resource relative path * @return String package resource file path * */ public static URL getPackageResourceUrl(String packageResource) { if (packageResource == null) return null; ClassLoader loader = Thread.currentThread().getContextClassLoader(); return loader.getResource(packageResource); } public static void main(String[] args) { System.out.println(FileUtil.getPackageResourceUrl("META-INF/config.xml")); }} interpb(曾曾胡,深怕情多累美人!!!) 的代码在tomcat无效了。我觉得还是从classloader入手比较好。 怎样去写java的界面? 问个问题。关于java中函数的调用。谢谢解答。 从键盘输入一个数,然后求其平方用Java怎么写 请教一个Scanner类读入问题 各位高手指教!! 怎么我的图象第一次显示不出来? 正则表达式,是不是都一样 关于java中的几个关键概念 system类中arraycopy()函数 连结数据库时提示java.sql.sqlexception IO异常? 想建一个对话框程序 可是不能如愿 请帮忙啊 小问题
import java.io.FileInputStream;
import java.io.FilenameFilter;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;/**
*
* @author ronny_zeng
*
*/
public class SearchClass {
public static void main(String[] args) throws Exception {
String classpath = System.getProperty("java.class.path");
String[] all = classpath.split(";");String packageName = "java.lang";for(int i = 0;i<all.length;i++) {
if(all[i].endsWith(".jar")) {
findJar(all[i],packageName );
} else {
findFile(all[i],packageName );
}}
}/**
*
* @param path
* @param packName
* @throws Exception
*/
public static void findFile(String path, String packName) throws Exception {
File file = new File(path + "\\" + packName.replace('.', '\\'));System.out.println(file.getAbsolutePath());
if (file.exists() && file.isDirectory()) {File[] classes = file.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
if (name.endsWith(".class")) {
System.out.println(name);
return true;
}
return false;
}
});
System.out.println(classes.length);
}
}/**
*
*/
public static void findJar(String jar ,String packName) throws Exception {
ZipInputStream in = new ZipInputStream(new FileInputStream(
new File(jar)));
ZipEntry ze = null;while ((ze = in.getNextEntry()) != null) {
if(ze.getName().startsWith(packName.replace(".","/"))&&ze.getName().endsWith(".class")&&(ze.getName().lastIndexOf("/")==(packName.replace(".","/")+"/").lastIndexOf("/"))) {
System.out.println(ze.getName());
}
}
}}
import java.io.File;
import java.io.FileInputStream;
import java.io.FilenameFilter;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
/**
*
* @author ronny_zeng
*
*/
public class SearchClass {
public static void main(String[] args) throws Exception {
String classpath = System.getProperty("java.class.path");
String[] all = classpath.split(";");
String pack = "javax.swing"; long begin = System.currentTimeMillis(); for (int i = 0; i < all.length; i++) {
all[i].trim();
if (all[i].endsWith(".jar")) {
findJar(all[i], pack);
} else {
findFile(all[i], pack);
}
} // for
findJar(System.getProperty("java.home")+"\\lib\\rt.jar", pack);
System.out.println(" \nTotal Time : "
+ (System.currentTimeMillis() - begin) + " ms");
} /**
* find class in flat file
* @param path
* @param packName
* @throws Exception
*/
public static void findFile(String path, String packName) throws Exception {
File file = new File(path + "\\" + packName.replace('.', '\\'));
if (file.exists() && file.isDirectory()) {
File[] classes = file.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
if (name.endsWith(".class")) {
System.out.println(name);
return true;
}
return false;
}
});
System.out.println(classes.length);
}
}
/**
* find class in jar
* @param jar
* @param packName
* @throws Exception
*/
public static void findJar(String jar, String packName) throws Exception {
ZipInputStream in = new ZipInputStream(new FileInputStream(
new File(jar)));
ZipEntry ze = null; while ((ze = in.getNextEntry()) != null) {
if (ze.getName().startsWith(packName.replace(".", "/"))
&& ze.getName().endsWith(".class")
&& (ze.getName().lastIndexOf("/") == (packName.replace(".",
"/") + "/").lastIndexOf("/"))) {
System.out.println(ze.getName());
}
}
}
}
改进了一下
return loader.getResource(packageResource).getFile().replaceAll("%20", " ");
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.sql.Array;
import java.util.ArrayList;import javax.imageio.ImageIO;
public class FileUtil
{
/**
* read ascii file
* */
public static StringBuffer readFile(String filename)
{
try
{
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
StringBuffer recordBuf = new StringBuffer();
String record = null;
while ((record = br.readLine()) != null)
{
recordBuf.append(record + "\n");
}
br.close();
fr.close(); return recordBuf;
}
catch (Exception ex)
{
Log.debug("FileUtil.readFile(): " + ex.toString());
} return null;
} /**
* read byte file
* */
public static byte[] readByteFile(String filename)
{
try
{
File file = new File(filename);
byte[] data = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(data);
fis.close(); return data;
}
catch (Exception ex)
{
Log.debug("FileUtil.readByteFile(): " + ex.toString());
} return null;
} /**
* read byte file
* */
public static BufferedImage readImageFile(String filename)
{
try
{
return ImageIO.read(new File(filename));
}
catch (IOException ex)
{
Log.debug("FileUtil.readImageFile(): " + ex.toString());
} return null;
} /**
* read package resource
* */
public static StringBuffer readPackageResource(String packageResource)
{
if (packageResource == null)
return null; try
{
ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream is = loader.getResourceAsStream(packageResource);
BufferedReader bf = new BufferedReader(new InputStreamReader(is));
StringBuffer recordBuf = new StringBuffer();
String record = null;
while ((record = bf.readLine()) != null)
{
recordBuf.append(record + "\n");
}
bf.close();
is.close(); return recordBuf;
}
catch (Exception ex)
{
Log.debug("readPackageResource(): " + ex.toString());
ex.printStackTrace();
} return null;
} /**
* read package resource
* */
public static byte[] readPackageByteResource(String packageResource)
{
if (packageResource == null)
return null; try
{
//get data length
ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream is = loader.getResourceAsStream(packageResource);
int length = 0;
while (is.read() != -1)
{
length++;
}
is.close(); //read data
byte[] data = new byte[length];
is = loader.getResourceAsStream(packageResource);
is.read(data);
is.close(); return data;
}
catch (Exception ex)
{
Log.debug("readPackageResource(): " + ex.toString());
ex.printStackTrace();
} return null;
} /**
* read package resource
* */
public static BufferedImage readPackageImageResource(String packageResource)
{
if (packageResource == null)
return null; try
{
ClassLoader loader = Thread.currentThread().getContextClassLoader();
return ImageIO.read(loader.getResource(packageResource));
}
catch (IOException ex)
{
Log.debug("FileUtil.readPackageImageResource(): " + ex.toString());
} return null;
} /**
* get resource file path in package
* @param packageResource package resource relative path
* @return String package resource file path
* */
public static String getPackageResourcePath(String packageResource)
{
if (packageResource == null)
return null; if (packageResource.startsWith("\\") || packageResource.startsWith("/"))
packageResource = packageResource.substring(1); if (packageResource.endsWith("\\") || packageResource.endsWith("/"))
packageResource = packageResource.substring(0, packageResource.length() - 1); ClassLoader loader = Thread.currentThread().getContextClassLoader();
return loader.getResource(packageResource).getFile().replaceAll("%20", " ");
} /**
* get resource file path in package
* @param packageResource package resource relative path
* @return String package resource file path
* */
public static URL getPackageResourceUrl(String packageResource)
{
if (packageResource == null)
return null; ClassLoader loader = Thread.currentThread().getContextClassLoader();
return loader.getResource(packageResource);
} public static void main(String[] args)
{
System.out.println(FileUtil.getPackageResourceUrl("META-INF/config.xml"));
}
}
我觉得还是从classloader入手比较好。