<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>小强ORG &#187; Java</title>
	<atom:link href="http://www.xiaoqiang.org/category/java/feed" rel="self" type="application/rss+xml" />
	<link>http://www.xiaoqiang.org</link>
	<description>关注web前端开发&#124;web性能&#124;NodeJs&#124;用户体验&#124;交互设计</description>
	<lastBuildDate>Mon, 30 Jan 2012 09:25:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>数据库存储的路径遍历成树结构</title>
		<link>http://www.xiaoqiang.org/java/java_path_tree.html</link>
		<comments>http://www.xiaoqiang.org/java/java_path_tree.html#comments</comments>
		<pubDate>Fri, 09 Jul 2010 07:07:22 +0000</pubDate>
		<dc:creator>小强</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[树目录]]></category>

		<guid isPermaLink="false">http://www.xiaoqiang.org/?p=6</guid>
		<description><![CDATA[cms系统的资源功能原先是根据linux服务器的目录结构生成的数，把无用的空目录也显示出来了。所以考虑由数据库存储的资源文件路径生成数。 根据数据库资源路径生成的树结构如下： 详细代码： /** * @param path 站点目录 * @description 根据数据库记录的路径字符串解析某个站点下的目录，以树结构封装 * @modified 根据数据库遍历 */ public ResFolder parseFolderSql(Long siteId) { ResFolder resFolderr = new ResFolder(); ArrayList&#60;String&#62; 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&#60;ResFolder&#62; &#8230; <a href="http://www.xiaoqiang.org/java/java_path_tree.html">更多内容 <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>cms系统的资源功能原先是根据linux服务器的目录结构生成的数，把无用的空目录也显示出来了。所以考虑由数据库存储的资源文件路径生成数。</p>
<div id="attachment_27" class="wp-caption aligncenter" style="width: 160px"><a class="lightbox" href="http://www.xiaoqiang.org/wp-content/uploads/2010/07/db_res_path.jpg"><img class="size-thumbnail wp-image-27 " title="db_res_path" src="http://www.xiaoqiang.org/wp-content/uploads/2010/07/db_res_path-150x150.jpg" alt="数据库资源路径" width="150" height="150" /></a><p class="wp-caption-text">数据库资源路径</p></div>
<p>根据数据库资源路径生成的树结构如下：</p>
<div id="attachment_29" class="wp-caption aligncenter" style="width: 160px"><a class="lightbox" href="http://www.xiaoqiang.org/wp-content/uploads/2010/07/res_tree.jpg"><img class="size-thumbnail wp-image-29 " title="res_tree" src="http://www.xiaoqiang.org/wp-content/uploads/2010/07/res_tree-150x150.jpg" alt="生成的资源树" width="150" height="150" /></a><p class="wp-caption-text">生成的资源树</p></div>
<p><span id="more-6"></span><br />
详细代码：</p>
<pre class="brush:java">/**
 * @param path 站点目录
 * @description 根据数据库记录的路径字符串解析某个站点下的目录，以树结构封装
 * @modified 根据数据库遍历
 */
public ResFolder parseFolderSql(Long siteId) {
	ResFolder resFolderr = new ResFolder();
	ArrayList&lt;String&gt; 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&lt;ResFolder&gt; childs = new LinkedHashSet&lt;ResFolder&gt;();
		for (int i = 0; i &lt; list.size(); i++) {
			if (!"/".equals(list.get(i))) {
				String fullPath = list.get(i);
				String strTemp = fullPath.substring(1);
				if (strTemp != null &amp;&amp; !"".equals(strTemp)) {
					String selfStr = "";
					if (strTemp.indexOf("/") == -1) {
						selfStr = fullPath;
					} else {
						int strP = strTemp.indexOf("/") + 1;
						selfStr = fullPath.substring(0, strP);
					}
					if (selfStr != null &amp;&amp; !"".equals(selfStr)) {
						List&lt;String&gt; l = new ArrayList&lt;String&gt;();
						for (int j = 0; j &lt; list.size(); j++) {
							String tempStr = list.get(j);
							if (tempStr.indexOf(selfStr) == 0&amp;&amp;!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&lt;String&gt; l) {
	ResFolder resFolderr = new ResFolder();
	if (l != null) {
		resFolderr.setResFolderName(nPath.substring(nPath.lastIndexOf("/") + 1));
		resFolderr.setResFolderParent(pfolder);
		resFolderr.setResFolderPath(nPath);
		Set&lt;ResFolder&gt; childs = new LinkedHashSet&lt;ResFolder&gt;();
		for (int i = 0; i &lt; 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 &amp;&amp; !"".equals(strTemp)
						&amp;&amp; !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 &amp;&amp; !"".equals(selfStr)) {
						ArrayList&lt;String&gt; list = new ArrayList&lt;String&gt;();
						for (int j = 0; j &lt; l.size(); j++) {
							String tempStr = l.get(j);
							if (tempStr.indexOf(selfStr) == 0
									&amp;&amp; !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;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.xiaoqiang.org/java/java_path_tree.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

