精华内容
下载资源
问答
  • /*未经本人同意,禁止转载。...以下讲解, 包扫描jar包扫描,自动识别包扫描还是jar包扫描。//下文需要一个ClassLoader,private ClassLoader classLoader;public PackageParse() {}//因为得到jav...

    /*未经本人同意,禁止转载。

    做工程时,有时候需要扫描指定包,或者指定jar包,甚至扫描指定包下指定类,本文章详细讲解如何扫描,以及智能扫描,小编讲的很详细了仔细看。

    以下讲解, 包扫描和jar包扫描,自动识别包扫描还是jar包扫描。

    //下文需要一个ClassLoader,

    private ClassLoader classLoader;

    public PackageParse() {

    }

    //因为得到java文件后我们需要把该文件的类型返回给使用者,使用者有该类型,

    //就可以得到成员,方法,注解,等等 ,所以提供一个抽象方法,给使用者返回class>类型

    public abstract void dealClass(Class> klass);

    //提供项目下的包比如 com.mec.util (或者提供com.mec.util.test.java)

    //返回值为PackageParse也就是本类型,是为了外部方便使用而已,无其他意思。

    public PackageParse scanRoot(String packName) {

    //创建类加载器,不懂的可以百度学习下,以及classLoader.getResources

    this.classLoader = Thread.currentThread().getContextClassLoader();

    //packageName存放包名

    String packageName = "";

    //如果不含类即不是com.mec.util.test.java格式

    if(!packName.contains(".java")) {

    //将包名字变成路径

    packageName = packName.replace(".", "/");

    } else {

    //是com.mec.util.test.java格式

    //将路径变为com/mec/util

    int lastIndex = packName.lastIndexOf(".");

    int secandIndex = packName.substring(0, lastIndex).lastIndexOf(".");

    //设置包命为com.mec.util即为去掉.test.java

    packName = packName.substring(0, secandIndex);

    //将路径变为com/mec/util

    packageName = packName.substring(0, secandIndex).replace(".", "/");

    }

    try {

    //加载packageName的路径返回值为Enumeration类型

    Enumerationurl = classLoader.getResources(packageName);

    //如果包名正确且不是空包,循环

    while(url.hasMoreElements()) {

    URL ur = url.nextElement();

    //查看url的类型

    String type = ur.getProtocol();

    //如果是jar包类型

    if(type.equals("jar")) {

    //处理jarbao,方法在后面

    dealJar(ur);

    //如果是file类型

    } else if(type.equals("file")) {

    //URL转换为file类型,File构造方法里有File(URI uri)

    File file = new File(ur.toURI());

    //如果file是个目录

    if(file.isDirectory()) {

    //调用处理目录文件

    dealFiles(packName, file);

    } else {

    //处理文件

    String name = file.getName();

    //如果是class文件处理

    if(name.contains(".class")) {

    //调用处理java类型的文件也就是**.class,是我们想要的文件

    deaJavaFile(file, packName);

    } else {

    //不是继续循环

    continue;

    }

    }

    }

    }

    } catch (IOException e) {

    e.printStackTrace();

    } catch (URISyntaxException e) {

    e.printStackTrace();

    }

    return this;

    }

    //处理目录文件

    private void dealFiles(String packageName, File file) {

    //安全期间判断下文件是否存在,存在的话进行操作

    if(file.exists()) {

    //file一定是目录型文件所以得到该目录下所有文件遍历它们

    File[] files = file.listFiles();

    for(File childfile : files) {

    //如果子文件是目录,则递归处理,调用本方法递归。

    if(childfile.isDirectory()) {

    //注意递归时候包名字要加上".文件名"后为新的包名

    //因为后面反射时需要类名,也就是com.mec.***

    dealFiles(packageName + "." + childfile.getName(), childfile);

    } else {

    //如果该文件不是目录。

    String name = childfile.getName();

    //该文件是class类型

    if(name.contains(".class")) {

    处理它

    deaJavaFile(childfile, packageName);

    } else {

    continue;

    }

    }

    }

    } else {

    return;

    }

    }

    //得到了我们想要的**.class文件,处理它,我们希望返回该类型即可。

    private void deaJavaFile(File file, String packageName) {

    //以下操作得到类型

    int index = file.getName().lastIndexOf(".class");

    String filename = file.getName().substring(0, index);

    Class> klass = null;

    try {

    klass = Class.forName(packageName + "." + filename);

    } catch (ClassNotFoundException e) {

    e.printStackTrace();

    }

    //得到类型后,用户怎么使用这个类型是用户的事情,和工具无关,所以提供一个抽象方法将klass传过去

    dealClass(klass);

    }

    //处理jar包类型

    private void dealJar(URL url) {

    //以下六行都是处理jar的固定方法

    JarURLConnection jarURLConnection;

    try {

    jarURLConnection = (JarURLConnection) url.openConnection();

    JarFile jarFile = jarURLConnection.getJarFile();

    EnumerationjarEntries = jarFile.entries();

    while(jarEntries.hasMoreElements()) {

    JarEntry jar = jarEntries.nextElement();

    //如果是目录,或者不是**.class类型不处理

    if(jar.isDirectory() || !jar.getName().endsWith(".class")) {

    continue;

    }

    //处理class类型

    String jarName = jar.getName();

    int dotIndex = jarName.indexOf(".class");

    String className = jarName.substring(0, dotIndex).replace("/", ".");

    Class> klass = Class.forName(className);

    //调用抽象方法,给使用者返回Class>类型

    dealClass(klass);

    }

    } catch (IOException e) {

    e.printStackTrace();

    } catch (ClassNotFoundException e) {

    e.printStackTrace();

    }

    }

    //以上为智能扫描,在提供一个普通扫描方法

    //需要文件的绝对路径,和该项目下的包名字

    public PackageParse scanClassPath(String absolute,String root) {

    File file = new File(absolute);

    if(file.exists()) {

    if(file.isFile()) {

    if(file.getName().endsWith(".java")){

    int index = file.getName().lastIndexOf(".java");

    String filename = file.getName().substring(0, index);

    Class> klass = null;

    try {

    klass = Class.forName(root + "." + filename);

    dealClass(klass);

    } catch (ClassNotFoundException e) {

    e.printStackTrace();

    }

    }

    }

    }

    return this;

    }

    以上为代码展示下用法

    a4bf9faafea643db08cce2e2c0818ebe.png2a64e34f1d623ac74e4995cd8df0a6bc.png

    展开全文
  • 1 packagecom.test.package_scanner....23 importjava.io.File;4 importjava.io.FileFilter;5 importjava.io.IOException;6 importjava.net.JarURLConnection;7 importjava.net.URISyntaxException;8 importjava.n...

    1 packagecom.test.package_scanner.core;2

    3 importjava.io.File;4 importjava.io.FileFilter;5 importjava.io.IOException;6 importjava.net.JarURLConnection;7 importjava.net.URISyntaxException;8 importjava.net.URL;9 importjava.util.Enumeration;10 importjava.util.jar.JarEntry;11

    12 public abstract classPackageScanner {13

    14 publicPackageScanner() {15 }16

    17 //scanPackage方法的重载

    18 public void scanPackage(Class>klass) {19 scanPackage(klass.getPackage().getName());20 }21

    22 public voidscanPackage(String packageName) {23 //将包名称转换为路径名称的形式

    24 String packagePath = packageName.replace(".", "/");25

    26 try{27 //由类加载器得到URL的枚举

    28 Enumeration resources =Thread.currentThread()29 .getContextClassLoader()30 .getResources(packagePath);31

    32 while(resources.hasMoreElements()) {33 URL url =resources.nextElement();34

    35 //处理jar包

    36 if (url.getProtocol().equals("jar")) {37 parse(url);38 } else{39 File file = newFile(url.toURI());40

    41 if(file.exists()) {42 //处理普通包

    43 parse(file, packageName);44 }45 }46 }47 } catch(IOException e) {48 e.printStackTrace();49 } catch(URISyntaxException e) {50 e.printStackTrace();51 }52 }53 //抽象方法,由用户自行处理扫描到的类

    54 public abstract void dealClass(Class>klass);55

    56 //jar包的扫描

    57 private void parse(URL url) throwsIOException {58 Enumeration jarEntries =((JarURLConnection) url.openConnection())59 .getJarFile().entries();60

    61 while(jarEntries.hasMoreElements()) {62 JarEntry jarEntry =jarEntries.nextElement();63 String jarName =jarEntry.getName();64

    65 if (!jarEntry.isDirectory() && jarName.endsWith(".class")) {66 //将文件路径名转换为包名称的形式

    67 dealClassName(jarName.replace("/", ".").replace(".class", ""));68 }69 }70 }71

    72 //普通包的扫描

    73 private voidparse(File curFile, String packageName) {74 File[] fileList = curFile.listFiles(newFileFilter() {75 //筛选文件夹和class文件,其余文件不处理

    76 @Override77 public booleanaccept(File pathname) {78 return pathname.isDirectory() || pathname.getName().endsWith(".class");79 }80 });81

    82 //目录就是一颗树,对树进行递归,找到class文件

    83 for(File file : fileList) {84 String fileName =file.getName();85 if(file.isDirectory()) {86 parse(file, packageName + "." +fileName);87 } else{88 String className = packageName + "." + fileName.replace(".class", "");89 dealClassName(className);90 }91 }92 }93

    94 //将找到的class文件生成类对象

    95 private voiddealClassName(String className) {96 try{97 Class> klass =Class.forName(className);98

    99 //注解、接口、枚举、原始类型不做处理

    100 if (!klass.isAnnotation()101 && !klass.isInterface()102 && !klass.isEnum()103 && !klass.isPrimitive()) {104 dealClass(klass);105 }106 } catch(ClassNotFoundException e) {107 e.printStackTrace();108 }109 }110

    111 }

    展开全文
  • java 扫描指定包(包括jar包

    千次阅读 2019-02-16 14:00:22
    /*未经本人同意,禁止转载。 做工程时,有时候需要...以下讲解, 包扫描jar包扫描,自动识别包扫描还是jar包扫描。 //下文需要一个ClassLoader, private ClassLoader classLoader; public PackageParse() ...

    /*未经本人同意,禁止转载。

    做工程时,有时候需要扫描指定包,或者指定jar包,甚至扫描指定包下指定类,本文章详细讲解如何扫描,以及智能扫描,小编讲的很详细了仔细看。

    以下讲解, 包扫描和jar包扫描,自动识别包扫描还是jar包扫描。

    //下文需要一个ClassLoader,
    private ClassLoader classLoader;
    
    	public PackageParse() {
    	}
            
            //因为得到java文件后我们需要把该文件的类型返回给使用者,使用者有该类型,
            //就可以得到成员,方法,注解,等等 ,所以提供一个抽象方法,给使用者返回class<?>类型
    	public abstract void dealClass(Class<?> klass);
    
    
    //提供项目下的包比如  com.mec.util (或者提供com.mec.util.test.java)
    //返回值为PackageParse也就是本类型,是为了外部方便使用而已,无其他意思。
    public PackageParse scanRoot(String packName) {
                    //创建类加载器,不懂的可以百度学习下,以及classLoader.getResources
    		this.classLoader = Thread.currentThread().getContextClassLoader();
                    //packageName存放包名
    		String packageName = "";
                    //如果不含类即不是com.mec.util.test.java格式
    		if(!packName.contains(".java")) {
                            //将包名字变成路径
    			packageName = packName.replace(".", "/");
    		} else {
                            //是com.mec.util.test.java格式
                            //将路径变为com/mec/util
    			int lastIndex = packName.lastIndexOf(".");
    			int secandIndex = packName.substring(0, lastIndex).lastIndexOf(".");
                            //设置包命为com.mec.util即为去掉.test.java
    			packName = packName.substring(0, secandIndex);
                            //将路径变为com/mec/util
    			packageName = packName.substring(0, secandIndex).replace(".", "/");
    		}
    		
    		try {    
                            //加载packageName的路径返回值为Enumeration<URL>类型
    			Enumeration<URL> url = classLoader.getResources(packageName);
    			//如果包名正确且不是空包,循环
    			while(url.hasMoreElements()) {
    				URL ur = url.nextElement();
                                    //查看url的类型
    				String type = ur.getProtocol();
                                    //如果是jar包类型
    				if(type.equals("jar")) {
                                            //处理jarbao,方法在后面
    					dealJar(ur);
                                    //如果是file类型	
    				} else if(type.equals("file")) {
                                          //URL转换为file类型,File构造方法里有File(URI uri)
    					File file = new File(ur.toURI());
                                            //如果file是个目录
    					if(file.isDirectory()) {
                                                    //调用处理目录文件
    						dealFiles(packName, file);	
    					} else {
                                                    //处理文件
    						String name = file.getName();
                                                    //如果是class文件处理
    						if(name.contains(".class")) {
                                                            //调用处理java类型的文件也就是**.class,是我们想要的文件
    							deaJavaFile(file, packName);
    						} else {
                                                    //不是继续循环
    							continue;
    						}
    					}
    				}	
    			}	
    		} catch (IOException e) {
    			e.printStackTrace();
    		} catch (URISyntaxException e) {
    			e.printStackTrace();
    		}
    		
    		return this;
    	}
    
    //处理目录文件
    private void dealFiles(String packageName, File file) {	
                    //安全期间判断下文件是否存在,存在的话进行操作
    		if(file.exists()) {
                            //file一定是目录型文件所以得到该目录下所有文件遍历它们
    			File[] files = file.listFiles();
    			for(File childfile : files) {
                                    //如果子文件是目录,则递归处理,调用本方法递归。
    				if(childfile.isDirectory()) {
                                            //注意递归时候包名字要加上".文件名"后为新的包名
                                            //因为后面反射时需要类名,也就是com.mec.***
    					dealFiles(packageName + "." + childfile.getName(), childfile);
    				} else {
                                    //如果该文件不是目录。
    					String name = childfile.getName();
                                            //该文件是class类型
    					if(name.contains(".class")) {
                                                    处理它
    						deaJavaFile(childfile, packageName);
    					} else {
    						continue;
    					}
    				}
    			}	
    		} else {
    			return;
    		}	
    	}
    
    //得到了我们想要的**.class文件,处理它,我们希望返回该类型即可。
    private void deaJavaFile(File file, String packageName) {
                    //以下操作得到类型
    		int index = file.getName().lastIndexOf(".class");
    		String filename = file.getName().substring(0, index);
    		Class<?> klass = null;
    		try {
    			klass = Class.forName(packageName + "." + filename);
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    		//得到类型后,用户怎么使用这个类型是用户的事情,和工具无关,所以提供一个抽象方法将klass传过去
    		dealClass(klass);
    	}
    
    //处理jar包类型
    private void dealJar(URL url) {
                    //以下六行都是处理jar的固定方法
    		JarURLConnection jarURLConnection;
    		try {
    			jarURLConnection = (JarURLConnection) url.openConnection();
    			JarFile jarFile = jarURLConnection.getJarFile();
    			Enumeration<JarEntry> jarEntries = jarFile.entries();
    			
    			while(jarEntries.hasMoreElements()) {
    				JarEntry jar = jarEntries.nextElement();
                                    //如果是目录,或者不是**.class类型不处理
    				if(jar.isDirectory() || !jar.getName().endsWith(".class")) {
    					continue;
    				} 
                                    //处理class类型
    				String jarName = jar.getName();
    				int dotIndex = jarName.indexOf(".class");
    				String className = jarName.substring(0, dotIndex).replace("/", ".");
    				Class<?> klass = Class.forName(className);
                                    //调用抽象方法,给使用者返回Class<?>类型
    				dealClass(klass);
    			}
    				
    		} catch (IOException e) {
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    		
    	}
    //以上为智能扫描,在提供一个普通扫描方法
    //需要文件的绝对路径,和该项目下的包名字
    public PackageParse scanClassPath(String absolute,String root) { 
    		File file = new File(absolute);
    		if(file.exists()) {
    			if(file.isFile()) {
    				if(file.getName().endsWith(".java")){
    					int index = file.getName().lastIndexOf(".java");
    					String filename = file.getName().substring(0, index);
    					Class<?> klass = null;
    					try {
    						klass = Class.forName(root + "." + filename);
    						dealClass(klass);
    					} catch (ClassNotFoundException e) {
    						e.printStackTrace();
    					}
    				}	
    			}
    		} 
    		return this;
    	}

    以上为代码展示下用法

    展开全文
  • Java包扫描

    包扫描的本质

    包扫描的实质扫描的是所给包中的class文件,且jar包用普通包的扫描方法来扫描是不正确的。
    

    实现包扫描的核心思路

    给出一个需要扫描的包的名称,首先进行判断,该包是jar包还是普通包
    
    	public void packageScann(String PackageName) {
    		String rootname = "";
    		//将包名转换为目录形式
    		rootname = PackageName.replace('.', '/');
    		//通过给出的包名转换成的目录名称得到当前目录的URL
    		URL url = Thread.currentThread().getContextClassLoader().getResource(rootname);
    		//通过url.getProtocol().equals()方法来判断是File文件目录还是Jar包
    		if (url.getProtocol().equals("file")) {
    			try {
    				URI uri = url.toURI();
    				File file = new File(uri);
    				//已检测是目录路径,通过dealDirectory()方法来处理
    				dealDirectory(PackageName, file);
    			} catch (URISyntaxException e) {
    				e.printStackTrace();
    			}					
    		} else if (url.getProtocol().equals("jar")) {
    			//否则是jar包,通过dealJarPackage()方法来处理,此方法只需URL作为参数
    			dealJarPackage(url);
    		}
    	}
    

    处理普通包

    处理目录路径dealDirectory()此时分成两种情况:一是已经是java的class文件,二是仍然未到最底层还是目录

    public void dealDirectory(String PackageName, File file) {
    		//通过当前目录即参数中的File类型的file,可以得到当前目录下的所有文件
    		File[] fileList = file.listFiles();
    		//便利这个list,以此处理每一个file
    		for (File files : fileList) {
    			//判断是否仍是目录路径,若是,调用dealDirectory()方法
    			if (files.isDirectory()) {
    				//但对于参数中的PackageName路径要增加一层,即在末尾追加“.files.getName()”,一定要注意不能省略中间的“.”
    				dealDirectory(PackageName + "." + files.getName(), files);
    			}
    			//此时判断是否已经是class文件,即不再是目录,已经不再有分支
    			else if (files.isFile()){
    				//处理class文件
    				dealClassFile(PackageName, files);
    			}
    			
    		}
    	}
    

    当前已经是ClassFile,进行对该class的完善处理

    	public void dealClassFile(String packageName, File file) {
    		//此时通过file.getName()得到的是文件名,形式为:XXX.XXXX
    		String className = file.getName();
    		//判断一下是否为class文件,即是否以".class"结尾
    		if (className.endsWith(".class")) {
    			//将末尾的.class去掉
    			className = className.replace(".class", "");
    				try {
    					//这里通过反射机制,处理经过完善的该class文件的名字(此时已经是该class文件多对应的类名)
    					Class<?> klass = Class.forName(packageName + "." + className);
    					//调用dealClass()方法,该方法是一个抽象方法,需要在用户使用该工具时对其进行实现,可以在不同的场景下有不同的处理方式
    					dealClass(klass);
    				} catch (ClassNotFoundException e) {
    					e.printStackTrace();
    				}
    		}
    	}
    

    其中有一个抽象方法dealClass,是在已经到了目录最底层的class文件之后,通过对class文件获取名字,进行完善,即前面加上包名,形成一个完整的类名,通过反射机制反射出该类的类型,对于后序得到的Class<?>的通过抽象方法来扩展工具的适用范围,用户根据需求来做不同的处理

    处理Jar包

    jar包需要特殊处理,根据代码进行解析	
    
    	private void dealJarPackage(URL url) {
    		try {
    			//JarURLConnection类通过JAR协议建立了一个访问 jar包URL的连接,可以访问这个jar包或者这个包里的某个文件
    			JarURLConnection connection = (JarURLConnection) url.openConnection();
    			//通过这个连接进一步先得到JarFile
    			JarFile jarFile = connection.getJarFile();
    			//得到该JarFile目录下所有项目
    			Enumeration<JarEntry> jarEntries = jarFile.entries();
    			//遍历得到的jarEntries 
    			while (jarEntries.hasMoreElements()) {
    				JarEntry jar = jarEntries.nextElement();
    				//如果是目录路径或者不是class文件,不予处理
    				if(jar.isDirectory() || !jar.getName().endsWith(".class")) {
    					continue;
    				}
    				//以上是对于Jar包的特殊处理,由于Jar包与普通包不一样,其中一些文件也不能直接以普通文件的方式来处理
    				
    				//以下与前面处理的方式一样
    				String jarName = jar.getName();
    				jarName = jarName.replace(".class", "");
    				jarName = jarName.replace("/", ".");
    				
    				try {
    					Class<?> klass = Class.forName(jarName);
    					dealClass(klass);
    				} catch (ClassNotFoundException e) {
    					e.printStackTrace();
    				}
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	
    

    以上是对于包扫描的分段解析,下面附上全部代码:

    public abstract class PackageScanner {
    	
    	public PackageScanner() {
    	}
    	
    	public abstract void dealClass(Class<?> klass);
    	
    	public void dealClassFile(String packageName, File file) {
    		//此时通过file.getName()得到的是文件名,形式为:XXX.XXXX
    		String className = file.getName();
    		//判断一下是否为class文件,即是否以".class"结尾
    		if (className.endsWith(".class")) {
    			//将末尾的.class去掉
    			className = className.replace(".class", "");
    				try {
    					//这里通过反射机制,处理经过完善的该class文件的名字(此时已经是该class文件多对应的类名)
    					Class<?> klass = Class.forName(packageName + "." + className);
    					//调用dealClass()方法,该方法是一个抽象方法,需要在用户使用该工具时对其进行实现,可以在不同的场景下有不同的处理方式
    					dealClass(klass);
    				} catch (ClassNotFoundException e) {
    					e.printStackTrace();
    				}
    		}
    	}
    	
    	private void dealJarPackage(URL url) {
    		try {
    			//JarURLConnection类通过JAR协议建立了一个访问 jar包URL的连接,可以访问这个jar包或者这个包里的某个文件
    			JarURLConnection connection = (JarURLConnection) url.openConnection();
    			//通过这个连接进一步先得到JarFile
    			JarFile jarFile = connection.getJarFile();
    			//得到该JarFile目录下所有项目
    			Enumeration<JarEntry> jarEntries = jarFile.entries();
    			//遍历得到的jarEntries 
    			while (jarEntries.hasMoreElements()) {
    				JarEntry jar = jarEntries.nextElement();
    				//如果是目录路径或者不是class文件,不予处理
    				if(jar.isDirectory() || !jar.getName().endsWith(".class")) {
    					continue;
    				}
    				//以上是对于Jar包的特殊处理,由于Jar包与普通包不一样,其中一些文件也不能直接以普通文件的方式来处理
    				
    				//以下与前面处理的方式一样
    				String jarName = jar.getName();
    				jarName = jarName.replace(".class", "");
    				jarName = jarName.replace("/", ".");
    				
    				try {
    					Class<?> klass = Class.forName(jarName);
    					dealClass(klass);
    				} catch (ClassNotFoundException e) {
    					e.printStackTrace();
    				}
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	public void dealDirectory(String PackageName, File file) {
    		//通过当前目录即参数中的File类型的file,可以得到当前目录下的所有文件
    		File[] fileList = file.listFiles();
    		//便利这个list,以此处理每一个file
    		for (File files : fileList) {
    			//判断是否仍是目录路径,若是,调用dealDirectory()方法
    			if (files.isDirectory()) {
    				//但对于参数中的PackageName路径要增加一层,即在末尾追加“.files.getName()”,一定要注意不能省略中间的“.”
    				dealDirectory(PackageName + "." + files.getName(), files);
    			}
    			//此时判断是否已经是class文件,即不再是目录,已经不再有分支
    			else if (files.isFile()){
    				//处理class文件
    				dealClassFile(PackageName, files);
    			}
    			
    		}
    	}
    	public void packageScann(String PackageName) {
    		String rootname = "";
    		//将包名转换为目录形式
    		rootname = PackageName.replace('.', '/');
    		//通过给出的包名转换成的目录名称得到当前目录的URL
    		URL url = Thread.currentThread().getContextClassLoader().getResource(rootname);
    		//通过url.getProtocol().equals()方法来判断是File文件目录还是Jar包
    		if (url.getProtocol().equals("file")) {
    			try {
    				URI uri = url.toURI();
    				File file = new File(uri);
    				//已检测是目录路径,通过dealDirectory()方法来处理
    				dealDirectory(PackageName, file);
    			} catch (URISyntaxException e) {
    				e.printStackTrace();
    			}					
    		} else if (url.getProtocol().equals("jar")) {
    			//否则是jar包,通过dealJarPackage()方法来处理,此方法只需URL作为参数
    			dealJarPackage(url);
    		}
    	}
    }
    

    测试如下

    com.mec.Complex为测试所用的类
    结果为
    Test类对于一些进行了输出测试

    展开全文
  • packagecom.MyUtils....[java] view plain copyimportjava.io.File;importjava.io.FileFilter;importjava.io.IOException;importjava.net.JarURLConnection;importjava.net.URI;importjava.net.URISyntaxException...
  • packagecom.MyUtils....[java] view plain copyimportjava.io.File;importjava.io.FileFilter;importjava.io.IOException;importjava.net.JarURLConnection;importjava.net.URI;importjava.net.URISyntaxException...
  • Java】包扫描Jar包扫描工具

    千次阅读 2018-10-03 00:03:47
    为什么要用到包扫描?... 包扫描可分为普通包扫描Jar包扫描扫描工具代码: 1.普通包扫描 // 给定包名及当前文件currentfile private void scanPackage(String packageName, File currentfile) {...
  • 扫描jar包工具

    2016-04-27 17:54:12
    java -jar jarscan.jar 查看help信息,可以快速扫描目标文件夹下jar包所包含的class文件相关信息
  • java二维码jar包

    2018-10-08 14:28:43
    ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码,可进行二维码开发。
  • 包扫描的作用: 按指定路径和要求扫描出符合条件的类,并反射出它们的类类型,在此基础上进行各种操作。 如:扫描包内含有注解的类并进行处理等。 我们的需求是对普通类进行处理的,所以在扫描时应当排除接口、...
  • 不管是在Spring还是Mybatis中,我们都需要配置一个路径进行扫描类对象。在Spring中,我们需要配置路径,让Spring容器能扫描包下面的Bean组件。在mybatis中,我们需要配置mapper路径,以扫描mapper接口,并生成...
  • package com.MyUtils.file; [java] view plain copy import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.net.JarURLConnectio...
  • 在某些场景中,我们需要得到某个包名下面所有的类,不仅仅是我们自己在写的包下面java类还有一些jar包(一些第三方提供的jar包里的类,一些是自己写的类)可以看下图,其结构如此: 比如我们想得到PackageScanner...
  • 包括我们自己在src里写的java类和一些第三方提供的jar包里的类,那么怎么来实现呢? 今天带大家来完成这件事。 src下面的类如何获取: 首先,比较简单的是得到我们自己写的类,我们先来完成这个, 项目的结构...
  • 包扫描在框架中应用很广泛,在spring中,通过给自己的类加注解的方式,利用spring的包扫描,完成依赖注入。 1 package com.test.package_scanner.core; 2 3 import java.io.File; 4 import java.io....
  • 主要是jar包的运行方式,注意看最后一个ENTRYPOINT参数中的–spring.config.location,这里表示运行的时候动态扫描加载某个目录下的配置文件。我们使用docker build将jar包打好镜像后,继续看第二步,不会的参考:...
  • 冗余jar包识别神器 - loose.jar场景...比如:该简单的测试工程lib里有63个jar包,如何扫描出真正使用到的jar包?操作步骤1) install后,命令行运行该程序,确保运行正常D:\Insight\InsightWhys\target>java -jar ...
  • package ... import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.net.JarURLConnection; import java.net.URISyntaxException; import java.ne...
  • 不管是在Spring还是Mybatis中,我们都需要配置一个路径进行扫描类对象。 在Spring中,我们需要配置路径,让Spring容器能扫描包下面的Bean组件。在mybatis中,我们需要配置mapper路径,以扫描mapper接口,并...
  • Spring扫描Jar包小用

    2020-07-16 20:52:02
    Java代码打成jar后 classgetClassLoadergetResource()返回为null Java读取jar包中的文件(与从工程中拿文件不同,不能用new File形式) 各种劝我使用getResourceAsStream来获取文件。其实如果只是单单读一个.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 478
精华内容 191
热门标签
关键字:

java扫描jar包

java 订阅