ClassLoader读取classpath目录下的文件

摘要:
ClassLoader主要为类请求提供服务。当jvm需要一个类时,它请求ClassLoader根据其名称获取该类,然后ClassLoader将其返回到jvm class=null)的class对象{message.append;}}捕获{e.printStackTrace();}Stringresult=message.toString().trim()。代替returnjsTja;}ClassLoader转到classpath目录,在pages目录中找到demo1.json文件,然后获取该文件的路径。以下是如何使用文件流读取文件中的信息。整个过程已完成。根据请求路径找到路径最后一层名称对应的json文件,然后使用ClassLoader获取classpath目录下的json路径,最后读取json文件,

ClassLoader读取classpath目录下的文件第1张

项目中的需求是根据配置文件创建一个页面,配置文件中配置一些图例或者搜索框。读取classpath目录下文件的方式有很多,且记录自己在项目中用到的一种方式。

ClassLoader主要是对类的请求提供服务,当jvm需要某个类时,它根据名称向ClassLoader请求获得这个类,然后ClassLoader返回给jvm这个类的class对象。ClassLoader不单单只是对类的请求提供服务,它负责载入系统中所有资源(class,文件,来自网络的字节流等),通过ClassLoader将资源载入jvm。每一个class都有一个reference,指向ClassLoader。

ClassLoader cd = getClass().getClassLoader();

当HTTP请求我的控制器时,我将获取它请求路径的最后一层目录,然后根据最后一层目录名称去classpath下找到这个目录名对应的json文件。

@RequestMapping(value = "page/*")
    publicString test1(Model model, HttpServletRequest request) {
        String uri =request.getRequestURI();
        String jspFile = uri.substring(uri.lastIndexOf("/")+1);
        String jsonFile = jspFile +".json";
        
        ClassLoader cd =getClass().getClassLoader();
        model.addAttribute("json", PageUtils.getPage(cd, jsonFile));
        return "modules/oa/common";
    }

代码中我使用*去匹配最后一层路径,然后使用最后一层路径名拼出一个json文件名。如果请求路径为***/page/demo1,那么显然我马上要读取的json文件是demo1.json。先获取ClassLoader和文件名称,然后看:PageUtils.getPage(cd, jsonFile)

/*** 
     * @paramcd
     * @paramjsonFile
     * @return
     */
    public staticnet.sf.json.JSONArray getPage(ClassLoader cd,String jsonFile){
        List<Object> list = new ArrayList<Object>();
        String module;
        JSONArray options = null;
        JSONArray searchOptions = null;
        JSONArray contentOptions = null;
        
        //读取配置文件
        com.alibaba.fastjson.JSONArray jsonArray =CommonUtils.readStyleJson(cd,jsonFile);
        
        for(Object obj : jsonArray) {
            module = ((JSONObject) obj).getString("module");
            options = CommonUtils.jsTja(((JSONObject) obj).getString("options"));
            if (StringUtils.isNotBlank(module) && options != null) {
                if (module.equals("search")) {
                    searchOptions =options;
                } else if (module.equals("content")) {
                    contentOptions =options;
                }
            } else{
                System.out.println(module + "不被使用!");
            }
        }
        
        Div selector =dealSelector(searchOptions);
        if (selector != null) {
            list.add(selector);//选择器栏目的所有div与script
}
        Div div =dealDiv(contentOptions,searchOptions);
        if (div != null) {
            list.add(div);//content栏目的所有div与script
}

        net.sf.json.JSONArray json = net.sf.json.JSONArray.fromObject(list);
        returnjson;
    }

看:CommonUtils.readStyleJson(cd,jsonFile)

/*** 解析json文件,获取配置信息
     * 
     * @return* @authorliuwei
     */
    public staticcom.alibaba.fastjson.JSONArray readStyleJson(ClassLoader cd,String jsonFile) {
        BufferedReader buffer;
        StringBuilder message = newStringBuilder();
        String line = null;
        URL url = cd.getResource("pages/"+jsonFile);
        File file = newFile(url.getFile());
        try{
            buffer = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));
            while ((line = buffer.readLine()) != null) {
                message.append(line);
            }
        } catch(IOException e) {
            e.printStackTrace();
        }
        String result = message.toString().trim().replace("
", "");
        returnjsTja(result);
    }

ClassLoader到classpath目录下去寻找一个在pages目录下的demo1.json的文件,然后获取该文件的路径,

ClassLoader读取classpath目录下的文件第2张

在下面就是使用文件流读取文件里面的信息了。由于是json文件,所以我需要将json文件转换为jsonArray方便获取里面的数据,所以jsTja(result),就是将json字符串转为json数组

/*** 把json字符串转为JSONArray
     * 
     * @paramstr
     * @return
     */
    public staticcom.alibaba.fastjson.JSONArray jsTja(String str) {
        com.alibaba.fastjson.JSONArray array =com.alibaba.fastjson.JSON.parseArray(str);
        returnarray;
    }
    

这里我都使用了类全名,因为我在PageUtils.getPage(cd, jsonFile)的最后使用了

net.sf.json.JSONArray json = net.sf.json.JSONArray.fromObject(list);

将一个list转换为json对象,返回到前台。

整个过程也就完成了,根据请求路径找到和路径最后一层名称相对应的json文件,然后用ClassLoader获取classpath目录下该json文件的路径,最后读取json文件,做一系列处理,最后将拼的HTML里的DIV和选择器封装为一个个对象放在list里,在将list转为json对象给前台直接使用。

ClassLoader读取classpath目录下的文件第3张

免责声明:文章转载自《ClassLoader读取classpath目录下的文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇noip2013提高组:积木大赛中文分词系列(一) 双数组Tire树(DART)详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

gcc 命令

实例 gcc 命令详解 可调试宏 gcc -ggdb3 -Wall -O0 test.c -o test 原文链接 gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步1.预处理,生成.i的文件[预处理器cpp]2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]3.有汇...

Linux Tomcat部署常用命令

Linux Tomcat部署常用命令 1、连接服务器 2、进入webapps目录: cd /usr/local/tomcat8080/webapps/ 3、上传文件(war包等):rz 4、删除文件夹及文件:rm -rf aa.war 5、回上级目录:cd../ 6、查看当前目录 ls 或者ll 7、查看tomcat控制台:tail -f /usr/loc...

spring boot 集成mongodb

一、相关依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId&...

Directory.GetFiles()获取多个类型格式的文件

第一种(用通配符) 1   string[] fileNameX = Directory.GetFiles(@"D:Sjdc", "*.xls?"); 2   Array array = Array.CreateInstance(typeof(string),fileNameX.Length); 3   fileNameX.CopyTo(array, 0)...

Recordset属性与方法

Recordset属性与方法 关于分页:   首先,我们可以为 PageSize 属性设置一个值,从而指定从记录组中取出的构成一个页的行数;然后通过RecordCount 属性来确定记录的总数;再用记录总数除以 PageSize 就可得到所显示的页面总数;最后通过 AbsolutePage 属性就能完成对指定页的访问    ----------------...

.NET中的Func委托用法

MSDN对于Func<T, TResult>)的官方解释: 封装一个具有一个参数并返回 TResult 参数指定的类型值的方法。  下面通过几个例子对比下,就容易知道其用法: 以下例子演示了如何利用委托将字符串转化为大写:     delegate string ConvertMethod(string inString);    privat...