将A/B/C/D.txt转换成树图结构显示,并存于mongDB
treeVo
private String key;
private String name;
private List<TreeVo> children;
首先将字符转换成TreeMap
private static void put(TreeMap structure, String root, String rest,String path) {
String[] tmp = rest.split("/", 2);
TreeMap rootDir = (TreeMap) structure.get(root);
if (rootDir == null) {
rootDir = new TreeMap();
structure.put(root, rootDir);
}
if (tmp.length == 1) { // path end
rootDir.put(tmp[0], path);
} else {
put(rootDir, tmp[0], tmp[1],path);
}
}
public static List<TreeVo> getTreeList(List<String> listOfPaths, String makePrefixStr){
TreeMap structure = new TreeMap();
for (String path : listOfPaths) {
String[] tmp = path.replaceAll(makePrefixStr, "").split("/", 2);
if(tmp.length==1){
structure.put(tmp[0], tmp[0]);
}else {
put(structure,tmp[0],tmp[1], path);
}
}
return setKeyValue(showFileToTree(structure),null,makePrefixStr);
}
将treeMap转换成list,并移除不想显示的字段如:isNull.txt
private static List<TreeVo> setKeyValue(List<TreeVo> treeVoList, String parentName,String makePrefixStr){
if (null != treeVoList) {
Iterator<TreeVo> iterator = treeVoList.iterator();
while (iterator.hasNext()) {
TreeVo treeVo = iterator.next();
StringBuilder stringBuffer = new StringBuilder();
if (null != treeVo.getChildren() && StringUtils.isEmpty(treeVo.getKey())) {
stringBuffer.append(Optional.ofNullable(parentName).orElse(""))
.append(treeVo.getName())
.append("/");
treeVo.setKey( makePrefixStr + stringBuffer.toString());
setKeyValue(treeVo.getChildren(), stringBuffer.toString(), makePrefixStr);
} else if (treeVo.getKey().contains("isNull.txt")) {
iterator.remove();
}
}
}
return treeVoList;
}
存储结构
private Long projectId;
private TreeVo treeVo;
StateDirTreeVo stateDirTreeVo = new StateDirTreeVo();
TreeVo treeVo = new TreeVo();
treeVo.setName("名字");
treeVo.setKey("key");
treeVo.setChildren(FileOtherUtil.getTreeList(pathList, makePrefixStr));
stateDirTreeVo.setProjectId(Long.valueOf(projectId));
stateDirTreeVo.setTreeVo(treeVo);
treeComponent.updateTreeByStateDirTreeVo(stateDirTreeVo, collectionName);