www.xiaoqiang.org小强ORG

[Java]数据库存储的路径遍历成树结构

cms系统的资源功能原先是根据linux服务器的目录结构生成的数,把无用的空目录也显示出来了。所以考虑由数据库存储的资源文件路径生成数。

数据库资源路径

数据库资源路径

根据数据库资源路径生成的树结构如下:

生成的资源树

生成的资源树


详细代码:

/**
 * @param path 站点目录
 * @description 根据数据库记录的路径字符串解析某个站点下的目录,以树结构封装
 * @modified 根据数据库遍历
 */
public ResFolder parseFolderSql(Long siteId) {
	ResFolder resFolderr = new ResFolder();
	ArrayList<String> list = resManager.findResTreeList(siteId);
	if (list != null) {
		resFolderr.setResFolderName(site_res_path.substring(site_res_path.lastIndexOf("/") + 1));
		resFolderr.setResFolderParent(null);
		resFolderr.setResFolderPath(site_res_path);
		Set<ResFolder> childs = new LinkedHashSet<ResFolder>();
		for (int i = 0; i < list.size(); i++) {
			if (!"/".equals(list.get(i))) {
				String fullPath = list.get(i);
				String strTemp = fullPath.substring(1);
				if (strTemp != null && !"".equals(strTemp)) {
					String selfStr = "";
					if (strTemp.indexOf("/") == -1) {
						selfStr = fullPath;
					} else {
						int strP = strTemp.indexOf("/") + 1;
						selfStr = fullPath.substring(0, strP);
					}
					if (selfStr != null && !"".equals(selfStr)) {
						List<String> l = new ArrayList<String>();
						for (int j = 0; j < list.size(); j++) {
							String tempStr = list.get(j);
							if (tempStr.indexOf(selfStr) == 0&&!tempStr.equals(selfStr)) {
								l.add(tempStr);
								list.set(j, "/");
							}
						}
						if (l != null) {
							ResFolder child = parseNext(resFolderr,selfStr, l);
							childs.add(child);
						}
					}
				}
			}
		}
		resFolderr.setResFolderChilder(childs);
	}
	return resFolderr;
}
/**
* 根据数据库存储的文件路径生成树遍历方法
* @param pfolder 父节点
* @param nPath  父节点路径
* @param l 子搜索列表
* @return
*/
public ResFolder parseNext(ResFolder pfolder, String nPath, List<String> l) {
	ResFolder resFolderr = new ResFolder();
	if (l != null) {
		resFolderr.setResFolderName(nPath.substring(nPath.lastIndexOf("/") + 1));
		resFolderr.setResFolderParent(pfolder);
		resFolderr.setResFolderPath(nPath);
		Set<ResFolder> childs = new LinkedHashSet<ResFolder>();
		for (int i = 0; i < l.size(); i++) {
			if (!"/".equals(l.get(i))) {
				String fullPath = l.get(i);
				String strTemp = fullPath.substring(fullPath.indexOf(nPath)
						+ nPath.length() + 1);
				if (strTemp != null && !"".equals(strTemp)
						&& !fullPath.equals(strTemp)) {
					String selfStr = "";
					if (strTemp.indexOf("/") == -1) {
						selfStr = fullPath;
					} else {
						int strP = strTemp.indexOf("/") + nPath.length()
								+ 1;
						selfStr = fullPath.substring(0, strP);
					}
					if (selfStr != null && !"".equals(selfStr)) {
						ArrayList<String> list = new ArrayList<String>();
						for (int j = 0; j < l.size(); j++) {
							String tempStr = l.get(j);
							if (tempStr.indexOf(selfStr) == 0
									&& !tempStr.equals(selfStr)) {
								list.add(tempStr);
								l.set(j, "/");
							}
						}
						if (list != null) {
							ResFolder child = parseNext(resFolderr,
									selfStr, list);
							childs.add(child);
						}
					}
				}
			}
		}
		resFolderr.setResFolderChilder(childs);
	}
	return resFolderr;
}