精华内容
下载资源
问答
  • java 获取某个包下所有类名

    千次阅读 2017-07-07 14:51:00
    本方法支持class 模式和jar 模式 package com.yoke.util; import com.yoke.md5util.UrlDecode; import com.yoke.util.file.FileUtil; import java.io.File; import java.io.IOException;...

    本方法支持class 模式和jar 包模式

    package com.yoke.util;
    
    import com.yoke.md5util.UrlDecode;
    import com.yoke.util.file.FileUtil;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    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;
    
    /**
     * @author jiangzeyin
     * @date 2016-9-9
     */
    public class PackageUtil {
    
        /**
         * 获取某包下(包括该包的所有子包)所有类
         *
         * @param packageName 包名
         * @return 类的完整名称
         * @throws UnsupportedEncodingException
         */
        public static List<String> getClassName(String packageName) throws IOException {
            return getClassName(packageName, true);
        }
    
        /**
         * 获取某包下所有类
         *
         * @param packageName  包名
         * @param childPackage 是否遍历子包
         * @return 类的完整名称
         * @throws UnsupportedEncodingException
         */
        public static List<String> getClassName(String packageName, boolean childPackage) throws IOException {
            List<String> fileNames = new ArrayList<>();
            ClassLoader loader = Thread.currentThread().getContextClassLoader();
            String packagePath = packageName.replace(".", "/");
            Enumeration<URL> urls = loader.getResources(packagePath);
            while (urls.hasMoreElements()) {
                URL url = urls.nextElement();
                if (url == null)
                    continue;
                String type = url.getProtocol();
                if (type.equals("file")) {
                    fileNames.addAll(getClassNameByFile(url.getPath(), childPackage));
                } else if (type.equals("jar")) {
                    fileNames.addAll(getClassNameByJar(url.getPath(), childPackage));
                }
            }
            fileNames.addAll(getClassNameByJars(((URLClassLoader) loader).getURLs(), packagePath, childPackage));
            return fileNames;
        }
    
        /**
         * 从项目文件获取某包下所有类
         *
         * @param filePath     文件路径
         *                     类名集合
         * @param childPackage 是否遍历子包
         * @return 类的完整名称
         * @throws UnsupportedEncodingException
         */
        private static List<String> getClassNameByFile(String filePath, boolean childPackage) throws UnsupportedEncodingException {
            List<String> myClassName = new ArrayList<>();
            filePath = UrlDecode.getURLDecode(filePath);
            File file = new File(filePath);
            File[] childFiles = file.listFiles();
            if (childFiles == null)
                return myClassName;
            for (File childFile : childFiles) {
                if (childFile.isDirectory()) {
                    if (childPackage) {
                        myClassName.addAll(getClassNameByFile(childFile.getPath(), childPackage));
                    }
                } else {
                    String childFilePath = childFile.getPath();
                    childFilePath = FileUtil.clearPath(childFilePath);
                    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 类的完整名称
         * @throws UnsupportedEncodingException
         */
        private static List<String> getClassNameByJar(String jarPath, boolean childPackage) throws UnsupportedEncodingException {
            List<String> myClassName = new ArrayList<String>();
            String[] jarInfo = jarPath.split("!");
            String jarFilePath = jarInfo[0].substring(jarInfo[0].indexOf("/"));
            jarFilePath = UrlDecode.getURLDecode(jarFilePath);
            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) {
                //SystemLog.Log(LogType.systemInfo, e.getMessage(), e);
            }
            return myClassName;
        }
    
        /**
         * 从所有jar中搜索该包,并获取该包下所有类
         *
         * @param urls         URL集合
         * @param packagePath  包路径
         * @param childPackage 是否遍历子包
         * @return 类的完整名称
         * @throws UnsupportedEncodingException
         */
        private static List<String> getClassNameByJars(URL[] urls, String packagePath, boolean childPackage) throws UnsupportedEncodingException {
            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;
        }
    }

    本方法是本人在网上看到,拿来用后面发现如果class 所在路径中存在中文则不行,本方法修护了这个问题。

    关键代码是在 108行 对其路径进行url 编码

    展开全文
  • ros获取某个包的绝对路径

    千次阅读 2018-09-10 16:20:36
    ros::package::getPath: std::string ros::package::getPath (const std::string &amp; package_name) Returns the fully-qualified path to a package, or an empty string if the package is not found. ...

    ros::package::getPath:

    std::string ros::package::getPath   (const std::string &    package_name)
    
    Returns the fully-qualified path to a package, or an empty string if the 
    package is not found.

    参考:
    http://docs.ros.org/kinetic/api/roslib/html/c++/namespaceros_1_1package.html#ae9470dd201aa4e66abb833e710d812a4
    https://answers.ros.org/question/73906/path-to-resource-files-in-c-node/

    展开全文
  • 首先贴上用到的jar,当然也可以通过递归file.list获取类的路径名称。 maven导入jar: &lt;dependency&gt; &lt;groupId&gt;org.reflections&lt;/groupId&gt; &lt;artifactId&...

    首先贴上用到的jar包,当然也可以通过递归file.list获取类的路径名称。

    maven导入jar包:

    <dependency>
                <groupId>org.reflections</groupId>
                <artifactId>reflections</artifactId>
                <version>0.9.11</version>
            </dependency>
            
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>21.0</version>
            </dependency>

    一、用reflections的方式

          public static List<String> clazzLis=new ArrayList<String>();
    		
    		
    			Reflections reflections=new Reflections("testsunmet.imp.*");
    			//比如可以获取有Pay注解的class
    			Set<Class<?>> classes=reflections.getTypesAnnotatedWith(Pay.class);
    
    			for(Class<?> cl:classes){
    				Pay pay=cl.getAnnotation(Pay.class);
    				clazzList.add(cl.getCanonicalName())//使用list把获取到的class路径装起来
    			}
    		}

    二、使用递归file.list的方式

    List<String> clzList=new ArrayList<>();
    		
    		private void scanPackages(String packageName){
    			//获取指定包的完整路径
    			String packagesUrl=this.getClass().getClassLoader().getResource("/"+packageName.replaceAll("\\.", "/")).getFile();
    			File scanFile=new File(packagesUrl);
    			String[] filenameList=scanFile.list();
    			
    			for(String filename:filenameList){
    				File file=new File(scanFile,filename);
    				if(file.isDirectory()){
    					scanPackages(packageName+"."+filename);
    				}else{
    					if(filename.indexOf(".class")>0)
    						clzList.add(packageName+"."+filename.replace(".class",""));
    				}
    			}
    		}

    个人推荐使用reflections。

     

    1.使用

    //使用class.forName获取对象 如Class clazz=Class.forName("xxxx.class");
    
    //clazz.newInstance()使用创建对象
    
    
    //使用clazz.isAnnotationPresent(xxx.class)判断是否式某种注解上的对象
    
    
    //获取注解上的值 clazz.getAnnotation(xxx.class)
    
    
    //设置属性值
    Field[] declaredFields=clazz2.newInstance().getClass().getDeclaredFields();
    			for(Field field:declaredFields){
    				field.setAccessible(true);//使可以set私有属性的值
                    //这只是测试,如果真正使用,注意set的值对应上
    				field.set(clazz2.newInstance(), "test");
    			}
    
    //获取方法
    
    Method[] methods=clazz.newInstance().getClass().getMethods();
    
    
    
    //执行对象中的方法
    
    methods.invoke(执行对象,方法参数)
    

     

    展开全文
  • java实现 获取指定路径下 指定格式 的所有文件
  • Python获取某个目录下所有文件名中含有某个字符的文件绝对路径,有点像Linux下面的find命令 #!/usr/bin/env python3 # -*- coding: utf-8 -*- import os path = 'E:\\PythonScripts' s = 'a' for filewalks in os....

    Python获取某个目录下所有文件名中含有某个字符的文件绝对路径,有点像Linux下面的find命令

    
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    import os
    path = 'E:\\PythonScripts'
    s = 'a'
    for filewalks in os.walk(path):
        for files in filewalks[2]:
            #print('true files',files)
            if s in files:
                print(s,' is in',os.path.join(filewalks[0],files))
    

    输出结果为

    a  is in E:\PythonScripts\edditableparam.py
    a  is in E:\PythonScripts\minandmax.py
    a  is in E:\PythonScripts\raise.py
    a  is in E:\PythonScripts\xfangcheeng.py
    a  is in E:\PythonScripts\.idea\rGraphicsSettings.xml
    a  is in E:\PythonScripts\.idea\workspace.xml
    a  is in E:\PythonScripts\.vscode\launch.json
    a  is in E:\PythonScripts\12\a.dat
    a  is in E:\PythonScripts\12\a.txt.txt
    

    关于这个脚本,两个问题需要搞清楚:

    os.walk(path)

    os.walk() 方法可以创建一个生成器,用以生成所要查找的目录及其子目录下的所有文件。
    我们将os.walk方法的输出拿出来看,如下:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    import os
    
    path = 'E:\\PythonScripts'
    s = 'a'
    
    for filewalks in os.walk(path):
        print(filewalks) 
    

    生成器的输出为返回的是一个三元组(root,dirs,files),root表示当前目录,dir为当前root目录下的文件夹,files为当前root目录下的文件
    上述输出为

    ('E:\\PythonScripts', ['.idea', '.vscode', '12'], ['edditableparam.py', 'fileopen.py', 'list-l.py', 'lowerstr.py', 'minandmax.py', 'raise.py', 'recursion.py', 'test.py', 'Untitled-1.c', 'use.py', 'xfangcheeng.py'])
    ('E:\\PythonScripts\\.idea', ['inspectionProfiles'], ['misc.xml', 'modules.xml', 'other.xml', 'PythonScripts.iml', 'rGraphicsSettings.xml', 'rSettings.xml', 'workspace.xml'])
    ('E:\\PythonScripts\\.idea\\inspectionProfiles', [], ['profiles_settings.xml'])
    ('E:\\PythonScripts\\.vscode', [], ['launch.json'])
    ('E:\\PythonScripts\\12', [], ['a.dat', 'a.txt.txt'])
    

    每调用一次,目录就会深一次,直到目录 到底。更详细的使用说明见os.walk使用说明

    os.path.join(path,files)

    os.path.join(path,files)将path和files结合,输出文件files的绝对路径。
    这个地方如果直接调用os.path.abspath(files)输出的结果为

    a  is in d:\Python-Scripts\edditableparam.py
    a  is in d:\Python-Scripts\minandmax.py
    a  is in d:\Python-Scripts\raise.py
    a  is in d:\Python-Scripts\xfangcheeng.py
    a  is in d:\Python-Scripts\rGraphicsSettings.xml
    a  is in d:\Python-Scripts\workspace.xml
    a  is in d:\Python-Scripts\launch.json
    a  is in d:\Python-Scripts\a.dat
    a  is in d:\Python-Scripts\a.txt.txt
    

    这个输出是错误的,个人理解为os.path.abspath(files)其实相当于os.path.join(‘当前工作目录’,files),此时脚本运行与 d:\Python-Scripts\,所以当前目录为 d:\Python-Scripts\,与文件名结合之后就变成了上述的错误输出,所以这里利用了os.walk(path)返回数组的第一项的root目录进行组合

    展开全文
  • adb获取包路径

    千次阅读 2018-12-25 16:35:41
    通过adb获取跳转包名路径 adb为我们提供了一个可以打印出当前系统所有service信息,在后面可加上具体的服务名的牛掰命令,那就是如下: adb shell dumpsys 常用的基于dumpsys命令: 获取设备电池信息:adb ...
  • 最近在练习go代码,恰好工作中有一些场景需要经常去访问某个目录下所有文件,将相对路径写入Excel并上传系统,同时打包文件上传服务器。利用工作之余,练练手学习写了一个小工具,主要实现功能如下: 获取指定目录...
  • 首先来看看使用反射来获取注解名: 只需在获取class后调用getAnnotation方法即可,如下 这里是获取JPA映射b表名,Table.class,使用下面这个可以获取表名 import javax.persistence.Table; annotation.name()...
  • java反射获取包下所有

    万次阅读 2019-11-09 15:54:39
    java反射获取包下所有类 public static void main(String[] args) { try { // 获取包名下所有类 Set<Class<?>> classes = getClasses("com"); for(Class c:classes){ ...
  • java反射获取包下所有的类

    千次阅读 2020-07-09 08:52:15
    1. 引三方 <!-- 反射框架 --> <dependency> <groupId>org.reflections</groupId> <artifactId>reflections<...//反射工具,指明扫描路径 Reflections reflectio
  • 获取python路径

    万次阅读 2017-08-04 17:38:59
    >>> import chatterbot >>> print chatterbot.__file__ /home/appleyuchi/.local/lib/python2.7/site-packages/chatterbot/__init__.pyc
  • 方法整体分两步,第一步递归获取所有文件 def getAllSub(path): Dirlist = [] Filelist = [] for home, dirs, files in os.walk(path): # 获得所有文件夹 for dirname in dirs: Dirlist.append(...
  • spring aop 拦截某个包下所有类方法

    万次阅读 2019-07-20 17:18:26
    @Pointcut("execution(* com.xxx.service..*.*(..))")
  • spring获取指定下面的所有

    千次阅读 2019-04-12 14:33:00
    * 利用spring提供的扫描下面的类信息,再通过classfrom反射获得类信息 * * @param scanPath * @return * @throws IOException */ public Set<Class<?>> doScan(String scanPath) throws ...
  • 在Windows系统下获取某个目录所有文件名有多种方法,比如:利用Windows自带的函数(包含#include <Windows.h>),利用boost库,利用C++的新特性。 这里利用C++14/17中的文件管理系统filesystem来获取某个...
  • 如题。find home |grep config.txt 会把home下所有的confg.txt路径返回,但是我只想要 home下某层子文件夹minihome下的config.txt的路径,如何写脚本?
  • Java 获取包路径的小技巧

    千次阅读 2018-03-05 16:42:31
    /** 项目在硬盘上的基础路径 */ private static final String PROJECT_PATH = System..../** 获取当前类的路径 com.example.CodeGenerator.core*/ private static String packAge = ProjectConstant.class.getPack...
  • 获取指定路径下特定后缀的文件(包含子文件夹) 当我们文件夹一层套一层,当我们想找的文件在一级一级的目录内,当我们想找到文件夹中不同层次相同的后缀文件时,这个小技巧超级管用。如果你恰好遇到这种问题,那就...
  • 但是当我把这个程序打成一个storage.jar之后,调用了使用了这个路径的方法,发现这个jar里面的获取路径的代码起不到作用了。。就是说,获取不到这个文件了。所以,想请问一下,这个该怎么获取?附上程序打成jar...
  • java 获取某一个包下所有class 包括jar包中的文件
  • 思路首先我们要先获得文件夹v1下所有的文件夹名。 因为打jar格式:ggservice-文件夹名.jar的形式。 我会先对整个项目进行javac编译,之后再cd进入到v1路径中, for循环得到的文件夹名,进行打jar。得到某目录...
  • 程序中包含有段程序是要从classes目录的template目录读取模板文件,但打包部署到jboss后却怎么也获取不到文件路径。 本人第一次使用jboss,查了好多资料,也只能通过getResourceAsStream获取流,但是我要...
  • java工具类 获取包下所有

    万次阅读 2013-12-25 10:56:48
     * 取得某个接口下所有实现这个接口的类  * */  public static List<Class> getAllClassByInterface(Class c) {  List returnClassList = null;    if(c.isInterface()) {  // 获取当前的名  ...
  • C++读取文件夹中所有文件的路径,包含子文件夹 C++实现指定文件夹的路径,获取路径下所有文件的路径,含子文件夹的文件,为了实现跨平台编译,最后会给出Window和Linux的完成程序:【1】下面是Windows版本:#...
  • Java获取资源路径下的文件、模板

    千次阅读 2018-12-30 20:39:55
    工作时有个需求是需要发送html格式的邮件,这里我们不讨论发邮件的事,而是讲一讲如何从java项目的资源路径下获取自定义的资源文件或者模板。我这里是需要获取html文件的内容,并替换其中的信息,发送html格式的邮件...
  • 交付物一栏常用,如题。 package 交付物一览; import java.io.File; public class Jioafuwuyilan { public static void main(String[] args) { String path = “D:\2019工作\20190717交付物一览\GDB-Tool\GDB-Tool”...
  • 读取一个package路径下面所有的class/** * 获得下面的所有的class * * @param pack * package完整名称 * @return List包含所有class的实例 */ public static List<Class> getClasssFromPackage(String pack...
  • Java中获取包下的文件方法

    千次阅读 2019-03-16 17:52:02
    测试:在Eclipse的包下创建文件,更新文件 在Eclipse创建note.txt 在该工程的bin目录中的包下,也可以找到 在Eclipse的note.txt中更新文件内容 在该工程的bin目录中的包下的note.txt...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 334,365
精华内容 133,746
关键字:

获取某个包下所有的路径