前端输入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;
}