解析服务器文件夹url

前端输入url,后台解析文件夹的url,并遍历查找文件夹中指定文件。

html代码:

<div class="panel panel-info">
    <div class="panel-heading">地址解析</div>
    <div class="panel-body">
        <form style="margin-left: 0px;" class="form-horizontal" id="url_form" action="/urlParse" enctype="multipart/form-data" method="post">
            <div class="form-group">
                <label for="url" class="col-md-2 control-label">url parse</label>
                <div class="col-md-9">
                    <input type="text" class="form-control" id="url" name="url" style="height: 39px;" placeholder="请输入服务器的url地址" />
                </div>
            </div>
            <div class="form-group">
                <div class="col-md-offset-2">
                    <button type="button" class="btn btn-info"  onclick="commitUrlForm()" style="margin-left: 15px;">url解析</button>
                    <%--<input type="submit" class="btn btn-info" value="url解析" style="margin-left: 15px;"/>--%>
                    <span id="urlMsg" style="color:#F00;margin-left: 281px;"></span>
                </div>
            </div>
        </form>
    </div>
</div>

Controller:

/**
     * url解析
     * @param url
     * @param model
     * @return
     */
    @RequestMapping(value="/urlParse")
    public String urlParse(String url, Model model){

        long start = System.currentTimeMillis();

        //url解析,每个xml数据按plan分类保存到list,每个xml中fail和incomplete项在其他xml中循环遍历
        XmlParseUtil xpu = gmsService.urlParse(url);

        //获取最终处理完的list,并去重后封装到一个gmsXml对象中
        packingResponseData(xpu, model);

        long end = System.currentTimeMillis();
        model.addAttribute("msg","解析成功!共耗时:"+ (end-start) + "ms!");

        return "gms_result";
    }

Service:

XmlParseUtil urlParse(String url);

ServiceImpl:

/**
     * 2.url解析
     * @param url
     * @return
     */
    @Override
    public XmlParseUtil urlParse(String url) {
    	//将window的分隔符根据系统替换为相关分隔符,替换后生成的新的字符串
        String newUrl = url.replaceAll("\\\\", Matcher.quoteReplacement(File.separator));
        //linux上访问共享文件夹:先采用mount方式进行挂载(/home/share18),再进行string拼接
        newUrl = "/home/share18/" + newUrl.substring(newUrl.indexOf("GMS测试"));
        System.out.println(newUrl);
        File file = new File(newUrl);
        if (!file.exists()) {
            System.out.println("目录不存在:" + file.getAbsolutePath());
            return null;
        }
        //1.使用SearchFileUtil类查找xml所有文件
        SearchFileUtil sfu = new SearchFileUtil(".xml");
        List<File> fileList = sfu.findFile(file);  //查找指定文件

        //2.对查找到的所有xml文件进行解析并进行数据处理
        XmlParseUtil xpu = dataParseAndHandle(fileList);

        //打印输出
        /*System.out.println("在 " + file.getName() + " 文件夹以及所有子文件夹里查找 .xml 文件");
        System.out.println("查找了" + sfu.getCountFiles() + " 个文件," + sfu.getCountFolders() + " 个文件夹,共找到 " + fileList.size() + " 个符合条件的文件:");
        */

        return xpu;
    }

相关工具类中方法:

/**
     * 方式一:根据file查找指定文件
     * @time 用时最短
     * @count countFiles / countFolders
     * @condition startsWith() / endsWith() / contains() / indexOf() / matches(String regex)
     * @param file
     * @return fileList
     */
    public List<File> findFile(File file){

        File[] files = file.listFiles();    //列出所有文件集合
        for (File f : files) {
            if (f.isDirectory()) {  //判断是否是文件夹
                countFolders++;     //文件夹计数
                findFile(f);   //递归
            }else {
                countFiles++;   //文件计数
                if (f.getName().endsWith(regex)) {    //判断文件是否是指定文件
                    fileList.add(f);    //保存文件到集合
                }
            }
        }

        return fileList;
    }

数据处理:

//1.对查找到的所有xml文件进行解析并进行数据处理
    private XmlParseUtil dataParseAndHandle(List<File> fileList) {
        //2.利用XMLParseUtil类xml解析,将每个xml数据按plan分类保存到list中
        XmlParseUtil xpu = new XmlParseUtil();
        for (File f : fileList) {
            xpu.handlerXmlFile(f);  //每次处理一个xml文件,并保存
        }

        //3.利用XmlParseUtil类,每个xml所需要的数据在同一plan下的所有xml中去遍历fail项和incomplete项
        // 遍历所有xml,查找fail项中case是否pass和incomplete项中module是否done
        xpu.tranversalXml(xpu.getCtsInstantXmlList(),xpu.getCtsInstantReList());
        xpu.tranversalXml(xpu.getCtsXmlList(),xpu.getCtsReList());
        xpu.tranversalXml(xpu.getGsiXmlList(),xpu.getGsiReList());
        xpu.tranversalXml(xpu.getVtsXmlList(),xpu.getVtsReList());
        xpu.tranversalXml(xpu.getGtsXmlList(),xpu.getGtsReList());
        xpu.tranversalXml(xpu.getStsXmlList(),xpu.getStsReList());

        //4.使用XmlParseUtil获取该项目类型,从数据库查询相关Waived和Trouble数据
        List<GmsWaived> gmsWaivedList = findWaivedDataByType(xpu);
        List<GmsTrouble> gmsTroubleList = findTroubleData();

        //5.将最后汇总fail和incomplete项在waived和trouble的list里遍历,看是否有豁免项或问题项
        tranversalWaivedAndTrouble(xpu.getCtsInstantXmlList(),gmsWaivedList,gmsTroubleList);
        tranversalWaivedAndTrouble(xpu.getCtsXmlList(),gmsWaivedList,gmsTroubleList);
        tranversalWaivedAndTrouble(xpu.getGsiXmlList(),gmsWaivedList,gmsTroubleList);
        tranversalWaivedAndTrouble(xpu.getVtsXmlList(),gmsWaivedList,gmsTroubleList);
        tranversalWaivedAndTrouble(xpu.getGtsXmlList(),gmsWaivedList,gmsTroubleList);
        tranversalWaivedAndTrouble(xpu.getStsXmlList(),gmsWaivedList,gmsTroubleList);

        //6.去掉同一plan下的module重复的fail项
        xpu.removeDupliByAttr(xpu.getCtsInstantXmlList(), xpu.getCtsInstantXml());
        xpu.removeDupliByAttr(xpu.getCtsXmlList(), xpu.getCtsXml());
        xpu.removeDupliByAttr(xpu.getGsiXmlList(), xpu.getGsiXml());
        xpu.removeDupliByAttr(xpu.getVtsXmlList(), xpu.getVtsXml());
        xpu.removeDupliByAttr(xpu.getGtsXmlList(), xpu.getGtsXml());
        xpu.removeDupliByAttr(xpu.getStsXmlList(), xpu.getStsXml());


        //打印输出
        for (File file : fileList) {
            System.out.println("文件名称:" + (file.getName()));
            System.out.println("文件大小:" + (file.length() / 1024) + "kb");
            System.out.println("文件路径:" + file.getAbsolutePath());
        }

        return xpu;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值