精华内容
下载资源
问答
  • Java遍历包中所有

    万次阅读 热门讨论 2012-10-29 15:13:25
    由于项目需要,我想获得某包下所有的(包括该包的所有子包),从网上找了找,没有什么能用的,即使找到了写的也不怎样,效率低下。索性就自己写吧,正好也锻炼锻炼写代码的功底。特此分享出来,希望能帮到大家.......

    由于项目需要,我想获得某包下所有的类(包括该包的所有子包),从网上找了找,没有什么能用的,即使找到了写的也不怎样,效率低下。索性就自己写吧,正好也锻炼锻炼写代码的功底。特此分享出来,希望能帮到大家......

    package com.itkt.mtravel.hotel.util;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    
    public class PackageUtil {
    	
    	public static void main(String[] args) {
    		String packageName = "com.itkt.mtravel.hotel";
    
    		List<String> classNames = getClassName(packageName);
    		for (String className : classNames) {
    			System.out.println(className);
    		}
    	}
    
    	public static List<String> getClassName(String packageName) {
    		String filePath = ClassLoader.getSystemResource("").getPath() + packageName.replace(".", "\\");
    		List<String> fileNames = getClassName(filePath, null);
    		return fileNames;
    	}
    
    	private static List<String> getClassName(String filePath, List<String> className) {
    		List<String> myClassName = new ArrayList<String>();
    		File file = new File(filePath);
    		File[] childFiles = file.listFiles();
    		for (File childFile : childFiles) {
    			if (childFile.isDirectory()) {
    				myClassName.addAll(getClassName(childFile.getPath(), myClassName));
    			} else {
    				String childFilePath = childFile.getPath();
    				childFilePath = childFilePath.substring(childFilePath.indexOf("\\classes") + 9, childFilePath.lastIndexOf("."));
    				childFilePath = childFilePath.replace("\\", ".");
    				myClassName.add(childFilePath);
    			}
    		}
    
    		return myClassName;
    	}
    }

    没什么特别复杂的,看看基本上就能懂的。给入任意包的命名空间,就能返回该包下的所有类。自我感觉还不错,简单易用,通用和扩展性也不错。其实写代码,在有熟练的基本功之后,剩下的就是组装的思路了。

     

     

    ============友情链接============

    Java遍历jar包所有类-后续 http://blog.csdn.net/wangpeng047/article/details/8202353

    Java遍历包中所有类-终续 http://blog.csdn.net/wangpeng047/article/details/8206427

    展开全文
  • Java遍历包中所有-终续

    万次阅读 热门讨论 2012-11-21 09:49:31
    上一篇中,我向大家讲述了遍历jar包时所遇到的困难,本篇将向大家分享最终版代码。 ... import java.io.File; import java.net.URL; import java.net.URLClassLoader;...import java.util.ArrayList;...import java.util.E

    上一篇中,我向大家讲述了遍历jar包时所遇到的困难,本篇将向大家分享最终版代码。

    package com.itkt.mtravel.hotel.util;
    
    import java.io.File;
    import java.net.URL;
    import java.net.URLClassLoader;
    import java.util.ArrayList;
    import java.util.Enumeration;
    import java.util.List;
    import java.util.jar.JarEntry;
    import java.util.jar.JarFile;
    
    public class PackageUtil {
    
    	public static void main(String[] args) throws Exception {
    		String packageName = "com.wang.vo.request.hotel";
    		// List<String> classNames = getClassName(packageName);
    		List<String> classNames = getClassName(packageName, false);
    		if (classNames != null) {
    			for (String className : classNames) {
    				System.out.println(className);
    			}
    		}
    	}
    
    	/**
    	 * 获取某包下(包括该包的所有子包)所有类
    	 * @param packageName 包名
    	 * @return 类的完整名称
    	 */
    	public static List<String> getClassName(String packageName) {
    		return getClassName(packageName, true);
    	}
    
    	/**
    	 * 获取某包下所有类
    	 * @param packageName 包名
    	 * @param childPackage 是否遍历子包
    	 * @return 类的完整名称
    	 */
    	public static List<String> getClassName(String packageName, boolean childPackage) {
    		List<String> fileNames = null;
    		ClassLoader loader = Thread.currentThread().getContextClassLoader();
    		String packagePath = packageName.replace(".", "/");
    		URL url = loader.getResource(packagePath);
    		if (url != null) {
    			String type = url.getProtocol();
    			if (type.equals("file")) {
    				fileNames = getClassNameByFile(url.getPath(), null, childPackage);
    			} else if (type.equals("jar")) {
    				fileNames = getClassNameByJar(url.getPath(), childPackage);
    			}
    		} else {
    			fileNames = getClassNameByJars(((URLClassLoader) loader).getURLs(), packagePath, childPackage);
    		}
    		return fileNames;
    	}
    
    	/**
    	 * 从项目文件获取某包下所有类
    	 * @param filePath 文件路径
    	 * @param className 类名集合
    	 * @param childPackage 是否遍历子包
    	 * @return 类的完整名称
    	 */
    	private static List<String> getClassNameByFile(String filePath, List<String> className, boolean childPackage) {
    		List<String> myClassName = new ArrayList<String>();
    		File file = new File(filePath);
    		File[] childFiles = file.listFiles();
    		for (File childFile : childFiles) {
    			if (childFile.isDirectory()) {
    				if (childPackage) {
    					myClassName.addAll(getClassNameByFile(childFile.getPath(), myClassName, childPackage));
    				}
    			} else {
    				String childFilePath = childFile.getPath();
    				if (childFilePath.endsWith(".class")) {
    					childFilePath = childFilePath.substring(childFilePath.indexOf("\\classes") + 9, childFilePath.lastIndexOf("."));
    					childFilePath = childFilePath.replace("\\", ".");
    					myClassName.add(childFilePath);
    				}
    			}
    		}
    
    		return myClassName;
    	}
    
    	/**
    	 * 从jar获取某包下所有类
    	 * @param jarPath jar文件路径
    	 * @param childPackage 是否遍历子包
    	 * @return 类的完整名称
    	 */
    	private static List<String> getClassNameByJar(String jarPath, boolean childPackage) {
    		List<String> myClassName = new ArrayList<String>();
    		String[] jarInfo = jarPath.split("!");
    		String jarFilePath = jarInfo[0].substring(jarInfo[0].indexOf("/"));
    		String packagePath = jarInfo[1].substring(1);
    		try {
    			JarFile jarFile = new JarFile(jarFilePath);
    			Enumeration<JarEntry> entrys = jarFile.entries();
    			while (entrys.hasMoreElements()) {
    				JarEntry jarEntry = entrys.nextElement();
    				String entryName = jarEntry.getName();
    				if (entryName.endsWith(".class")) {
    					if (childPackage) {
    						if (entryName.startsWith(packagePath)) {
    							entryName = entryName.replace("/", ".").substring(0, entryName.lastIndexOf("."));
    							myClassName.add(entryName);
    						}
    					} else {
    						int index = entryName.lastIndexOf("/");
    						String myPackagePath;
    						if (index != -1) {
    							myPackagePath = entryName.substring(0, index);
    						} else {
    							myPackagePath = entryName;
    						}
    						if (myPackagePath.equals(packagePath)) {
    							entryName = entryName.replace("/", ".").substring(0, entryName.lastIndexOf("."));
    							myClassName.add(entryName);
    						}
    					}
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return myClassName;
    	}
    
    	/**
    	 * 从所有jar中搜索该包,并获取该包下所有类
    	 * @param urls URL集合
    	 * @param packagePath 包路径
    	 * @param childPackage 是否遍历子包
    	 * @return 类的完整名称
    	 */
    	private static List<String> getClassNameByJars(URL[] urls, String packagePath, boolean childPackage) {
    		List<String> myClassName = new ArrayList<String>();
    		if (urls != null) {
    			for (int i = 0; i < urls.length; i++) {
    				URL url = urls[i];
    				String urlPath = url.getPath();
    				// 不必搜索classes文件夹
    				if (urlPath.endsWith("classes/")) {
    					continue;
    				}
    				String jarPath = urlPath + "!/" + packagePath;
    				myClassName.addAll(getClassNameByJar(jarPath, childPackage));
    			}
    		}
    		return myClassName;
    	}
    }

    由于我们并不确定jar包生成时采用的哪种方式,如果采用默认生成jar包的方式,那我们通过Thread.currentThread().getContextClassLoader().getResource()是获取不到的,因此我增加了从所有jar包中搜索提供的包域名,这样功能就完善了很多。

    那么就此关于“如何遍历包中所有类”就结束了,PackageUtil这个类的功能还有些少,不排除日后进一步完善的可能,如果大家关于这个util有什么新的需求或者建议,随时欢迎大家提出。发现bug的,也请及时通知我以便改进。

     

     

    ============友情链接============

    Java遍历jar包所有类-后续 http://blog.csdn.net/wangpeng047/article/details/8202353

    Java遍历包中所有类 http://blog.csdn.net/wangpeng047/article/details/8124390

    展开全文
  • 新建了一个Java项目C,**C只引用了b.jar,未引用a.jar**,于是出现了如下两个问题: 1、在C项目中,B没有getAge方法 2、在C项目中,使用强制类型转换时(如)B b = (B)map.get("key"),会报错: - The type A ...
  • package java.util.concurrent.locks public abstract class AbstractQueuedSynchronizer extends java.util.concurrent.locks.AbstractOwnableSynchronizer implements java.io.Serializable
  • JAVA IO包中层次关系

    千次阅读 2017-03-14 18:31:17
    字节输入流(InputStream) 字节输出流(OutputStream) 字符输入流(Reader) 字符输出流(Writer)

    字节输入流(InputStream)


    字节输出流(OutputStream)


    字符输入流(Reader)


    字符输出流(Writer)


    展开全文
  • NULL 博文链接:https://mrpengpengda.iteye.com/blog/1536292
  • java.lang包中类的总

    2011-12-25 16:35:23
    平时没怎么注意java.lang包中的其他、今天看了毕向东老师视频、发现自己对于API的了解还真是少了、 首先是:System、这个关于java虚拟机和系统的相关信息, import java.util.*; public class SystemDemo{...




    平时没怎么注意java.lang包中的其他类、今天看了毕向东老师视频、发现自己对于API的了解还真是少了、

    首先是:System类、这个类关于java虚拟机和系统的相关信息,

    import java.util.*;
    public class SystemDemo{
    	public static void main(String[]args){
    		Properties prop = System.getProperties();
    		//properties 是hashmap的子类、也就是集合的子类
    		//内部操作的都是字符串没有泛型定义
    		
    		//获得指定的属性信息
    		String value = System.getProperty("os.name");
    		System.out.println("操作系统类别"+value);
    		
    		//如果是系统中没有的信息会返回null
    		String value2=System.getProperty("mykey");
    		System.out.println("对于系统中不存在的信息返回值:"+value2);
    		
    		
    		//可以设置到系统属性中一些值
    		System.setProperty("mykey","zll");
    		
    		//可以在jvm启动时加载一些参数 java -Dzllkey lll
    		String value3=System.getProperty("zllkey");
    		System.out.println("虚拟机启动的时候可以加载参数:"+value3);
    		//打印系统中所有的Properties信息
    		for(Object str:prop.keySet()){	
    			System.out.println((String)prop.get(str));
    			
    		}
    	}
    
    }

    这些是对于System类加载系统信息的一些调用。

    对于存储系统信息的Properties、存储着键值对、

    java -Dzllkey="lllzzz" SystemDemo
    通过这个我们可以、应用到我们自己的应用程序中、

    过去我们的应用程序都是加载文件的方式启动的时候加载数据的、没想到这样也可以、又提供了一种思路、呵呵、

    然后我在tomcat服务器中发现了catalina.bat、tomcat启动的时候就用了这种模式、启动的时候可以设置参数。

    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%




    展开全文
  • 整合了java.awt.*;java.awt.event.*;javax.swing.*包中,结合布局与事件处理....这是本人自己写的哦
  • 好了,这个问题解决了之后,那么如何利用Java遍历jar包中所有的问题也前进了一大步了,我将在下一篇博文中正是分享源码。 ---------------------------------------------------------------------------------...
  • 问题:如果有两个不同的jar包中含有两个全限定类名完全相同的,那么如果我们程序中使用到了这个,会加载哪一个呢,今天我们就来做个试验看看。 为了做试验,我们建立如下三个module,其中main是一个springboot...
  • java 引用jar包中的图片

    千次阅读 2011-08-17 10:47:23
    对于加载图片,你将所有资源打包,你的位于一个包中,你的图片资源全部放在images文件夹中,而images文件夹也位于andycpp包内。这样的话,最终的路径表现为: *.jar  |__andycpp  |__ GU
  • 主要介绍了java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解的相关资料,需要的朋友可以参考下
  • Java jar包中获取路径

    千次阅读 2019-03-04 17:44:42
    在jar包中获取路径,一般是用于读取资源文件 System.getProperty的方式获取到的是启动路径,比如cd 到 E:/er下执行 存放在 F:/aa目录下的jar包, 获取到的路径就是E:/er 使用new File("")的方式有同样的...
  • Java精华内容深入Java API、嵌套和内部、与时间有关的Date,DateFormat,Calendar、文件与流、Java变量类型间的相互转换、Java与Web、用连接池提高Servlet访问数据库的效率、Java扩展、应用服务器的集群策略及...
  • 包(package)的创建及包中类引用 1.创建包 将自己编写的按功能放入相应的包中,以便在其他的应用程序中引用它, 这是对面向对象程序设计者最基本的要求。 我们可以使用package语句将编写的放入一个指定的...
  • 二丶选中引用jar包的所在的项目 (注意:第3步中先找到报错的jar然后remove然后执行第四步) 三丶重新引用jar包 做完这些就可以中成功引用相对应的外部jar包的方法了! 因为是坑,所以自己做下记录! 亲测没得问题! ...
  • java调用默认包中

    千次阅读 2017-03-15 11:55:15
    Class c; try { c = Class.forName("co_dc_tpc_TamperProofCodeService"); Method m = c.getDeclaredMethod("encodeStr", String.class); m.invoke(c.newInstance(), "1111112323"); ...
  • java中import默认包中

    千次阅读 2019-07-13 16:22:59
    假如有一个,直接不加package,也就是属于默认包: /** * Created by bo on 2019/7/13. */ public class Test { public int add(int x, int y) { return x + y; } } 另外一个,处于com包(或者任何非...
  • Java.util包中常用的

    千次阅读 2015-09-29 17:21:28
    Java.util.ArrayDeque Java.util.ArrayList Java.util.Arrays Java.util.BitSet Java.util.Calendar Java.util.Collections Java.util.Currency java.util.Date java.util.Dictionary
  • Java中的主类使用import语句引用tom.jiafei包中的Triangle,创建三角形,并计算出三角形的面积 代码: Triangle.java package tom.jiafei; public class Triangle { double sideA,sideB,sideC; boolean ...
  • Java.io包中常用的

    千次阅读 2015-09-29 17:23:09
    Java.io.BufferedInputStream实例 Java.io.BufferedOutputStream使用例子 Java.io.BufferedReader Java.io.BufferedWriter Java.io.ByteArrayInputStream Java.io.ByteArrayOutputStream Java.io....
  • java.lang包中的常用

    千次阅读 2015-09-29 17:19:59
    java.lang.Boolean java.lang.Byte java.lang.Character java.lang.Character.Subset java.lang.Character.UnicodeBlock java.lang.Class java.lang.ClassLoader java.lang.Compiler jav
  • jar包中有多个main方法,执行指定.java文件的main方法: java -cp jar包名 包名.类名 参数 举例: 执行test.jar包中cn.com.test.send包下Send.java中的main方法 参数有四个 java -cp test.jar ...
  • Java.math包中常用的

    千次阅读 2015-09-29 17:24:52
    Java.math包 Java.math.BigDecimal Java.math.BigInteger实例 Java.math.MathContext实例
  • 使用java命令行方式编译包中   好久没有接触Java了,试着手动编译和执行java源文件,没想到放入包中就不知道怎么编译了。只好动动手记下一篇,作为笔记。   新建一个HelloWorld的Test.java,如下: ...
  • java.lang包中常用的及其方法

    千次阅读 2018-03-20 21:24:10
    java.lang包中常用的及其方法 JAVA API(图片来源:实验楼) 包装 Integer包装 方法 返回值 功能描述 byteValue() byte 以 byte 类型返回该 Integer 的值 ...
  • java.util包中的Calendar

    千次阅读 2014-03-17 11:55:13
    java.util包中的Calendar class Calendar { private Calendar calendar = new Calendar(); private Calendar {}; public static synchronized Calendar getInstance(){ return calendar; } } 这是public ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 290,196
精华内容 116,078
关键字:

java如何引用包中的类

java 订阅