package cn.inkfish.app.cmd.doclist;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Map.Entry;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathExpressionException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import cn.inkfish.tools.xml.XPathTool;
public class DocListGener {
private File rootdir = new File("E:\\2011.4.5\\API\\lib_doc");
private static String[] docDirs = new String[] { "\\javadoc", "\\javadocs", "\\apidocs",
"\\api", "\\docs", "\\doc", "\\docs\\api", "\\doc\\api", "\\docs\\apidocs",
"\\docs\\javadocs", "\\docs\\javadoc", "\\doc\\javadocs", "\\doc\\javadoc",
"\\site\\javadocs", "\\site\\apidocs", "\\docs\\javadoc-api" };
private static String[] indexFiles = new String[] { "index.html", "index.htm" };
private int colNum = 3;
private int maxRow = 30;
private StringBuffer sb = new StringBuffer();
public static void main(String[] args) throws IOException {
DocListGener gener = new DocListGener();
File dest = new File(gener.rootdir, "index.html");
if (dest.exists()) {
dest.delete();
}
gener.generateHead();
gener.generateLibUrl();
gener.generateCommonUrl();
gener.generateEnd();
String content = gener.sb.toString();
content = content.replaceAll("COL_WIDTH", (100 / gener.colNum) + "%");
FileUtils.writeStringToFile(dest, content, "UTF-8");
}
private void generateLibUrl() {
sb.append("\t\t\t<td width=\"COL_WIDTH\" valign=\"top\">\n");
sb.append("\t\t\t\t<ul>\n");
File[] dirs = rootdir.listFiles();
Arrays.sort(dirs);
int counter = 0;
for (File dir : dirs) {
// 过滤掉非文件夹
if (!dir.isDirectory()) {
continue;
}
label:
for (int i = 0; i < docDirs.length; i++) {
for (String indexFile : indexFiles) {
File file = new File(new File(dir, docDirs[i]), indexFile);
if (file.exists()) {
counter++;
if (counter > maxRow) {
sb.append("\t\t\t\t</ul>\n");
sb.append("\t\t\t</td>\n");
sb.append("\t\t\t<td width=\"COL_WIDTH\" valign=\"top\">\n");
sb.append("\t\t\t\t<ul>\n");
counter = 0;
colNum++;
}
sb.append("\t\t\t\t\t<li>");
sb.append("<a target=\"_blank\" href=\"").append(file.toURI().toString())
.append("\">");
sb.append(FilenameUtils.getName(dir.toString()));
sb.append("</a>");
sb.append("</li>\n");
break label;
}
}
}
}
sb.append("\t\t\t\t</ul>\n");
sb.append("\t\t\t</td>\n");
}
private void generateHead() {
sb.append("<html>\n");
sb.append("<head profile=\"http://www.w3.org/2005/10/profile\">\n");
sb.append("\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n");
// sb.append("\t<meta name=\"author\" content=\"wuqiming\">\n");
// sb.append("\t<title>Java Docs</title>\n");
sb.append("\t<style>ul{margin-top:5px;}</style>\n");
sb.append("\t<!--<link rel=\"icon\" href=\"http://hi.csdn.net/attachment/201011/8/7093_128919873175yk.png\" type=\"image/png\">-->\n");
sb.append("\t<link rel=\"icon\" href=\"./favicon.png\" type=\"image/png\">\n");
sb.append("</head>\n");
sb.append("<body>\n");
//sb.append("\t<center><h2>Java Docs Collection(Wu Qiming)</h2></center>\n");
sb.append("\t<table style=\"font-size:14px;\" width=\"90%\" align=\"center\" cellspadding=\"0\" cellspacing=\"0\" border=\"1\">\n");
sb.append("\t\t<tr>\n");
}
private void generateCommonUrl() {
Map<String, Map<String, Properties>> map = getSites();
int counter = 0;
for (String category : map.keySet()) {
if (counter + 2 + map.get(category).size() >= maxRow) {
counter = 0;
sb.append("\t\t\t</td>\n");
}
if (counter == 0) {
sb.append("\t\t\t<td width=\"COL_WIDTH\" valign=\"top\">\n");
}
sb.append("\t\t\t\t").append(category).append("<br />\n");
counter += 2;
sb.append("\t\t\t\t<ul>\n");
Map<String, Properties> subMap = map.get(category);
for (Entry<String, Properties> entry : subMap.entrySet()) {
Properties prop = entry.getValue();
if (prop.containsKey("name") && prop.containsKey("url")) {
String[] names = StringUtils.split(prop.getProperty("name"), ' ');
String[] urls = StringUtils.split(prop.getProperty("url"), ' ');
String target = prop.getProperty("target", "_blank");
sb.append("\t\t\t\t\t<li>\n");
if (names.length == urls.length) {
for (int i = 0; i < names.length; i++) {
sb.append("\t\t\t\t\t\t<a target=\"").append(target).append("\" ");
sb.append("href=\"").append(urls[i]).append("\">");
sb.append(names[i]).append("</a> ");
}
} else {
sb.append("\t\t\t\t\t\t<a target=\"").append(target).append("\" ");
sb.append("href=\"").append(prop.getProperty("url")).append("\">");
sb.append(prop.getProperty("name")).append("</a>");
}
sb.append("\t\t\t\t\t</li>\n");
counter++;
System.out.println(counter + "\t" + prop.getProperty("name"));
}
}
sb.append("\t\t\t\t</ul>\n");
}
sb.append("\t\t\t</td>\n");
sb.append("\t\t</tr>\n");
}
private void generateEnd() {
sb.append("\t\t<tr>\n");
sb.append("\t\t\t<td colspan=\"" + colNum + "\">\n");
sb.append("Infos here<br>");
sb.append("\t\t\t</td>\n");
sb.append("\t\t</tr>\n");
sb.append("\t</table>\n");
sb.append("</body>\n");
sb.append("</html>");
}
private Map<String, Map<String, Properties>> getSites() {
Map<String, Map<String, Properties>> map = new LinkedHashMap<String, Map<String, Properties>>();
try {
InputStream is = this.getClass().getResourceAsStream("sites.xml");
XPathTool xpath = new XPathTool(is);
IOUtils.closeQuietly(is);
NodeList categories = xpath.getNodeSetValue("/sites/catagory/@name");
for (int i = 0; i < categories.getLength(); i++) {
Map<String, Properties> subMap = new LinkedHashMap<String, Properties>();
String cateName = categories.item(i).getNodeValue();
NodeList subSites = xpath.getNodeSetValue("/sites/catagory[@name='" + cateName
+ "']/site");
for (int j = 0; j < subSites.getLength(); j++) {
Properties prop = new Properties();
NamedNodeMap attributes = subSites.item(j).getAttributes();
for (int k = 0; k < attributes.getLength(); k++) {
prop.put(attributes.item(k).getNodeName(), attributes.item(k)
.getNodeValue());
}
subMap.put(prop.getProperty("name"), prop);
}
map.put(cateName, subMap);
}
} catch (SAXException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch (ParserConfigurationException ex) {
ex.printStackTrace();
} catch (XPathExpressionException ex) {
ex.printStackTrace();
}
return map;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<sites>
<catagory name="API">
<site name="JDK_API" url="E:\API\JDK_API_1_6_中文版.CHM" />
<site url="D:\" name="D" />
<site url="E:\" name="E" />
<site url="E:\API\JDK_API_1_6_中文版.CHM" name="JDK_API" />
<site url="E:\API\[Java参考文档].J2EE1.5.chm" name="J2EE.chm" />
<site url="E:\API\Hibernate3.2官方中文参考手册.pdf" name="Hibernate" />
<site url="E:\Workspaces" name="Workspaces" />
<site url="E:\API" name="API" />
<site url="E:\API\jQueryAPI-100214.chm" name="jQueryAPI" />
<site url="E:\API\程序员常用js.chm" name="js" />
<site url="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps" name="Tomcat_webapps" />
<site url="E:\我的XP环境配置" name="我的XP环境配置" />
<site url="http://zhangyulong.iteye.com" name="ITeye" />
<site url="http://localhost:8080" name="tomcat" />
<site url="http://zyl1221.download.csdn.net" name="csdn" />
<site url="http://w3school.com.cn" name="w3c" />
<site url="http://user.qzone.qq.com/574893508" name="qzone" />
<site url="http://www.renren.com/home" name="renren" />
<site url="http://detail.zol.com.cn/" name="zol" />
<site url="http://appimg2.qq.com/card/index_v3.html?qzone=1" name="card" />
</catagory>
</sites >
apache-mime4j-0.6.jar
commons-logging-1.1.1.jar
httpclient-4.0.jar
httpcore-4.0.1.jar
httpmime-4.0.jar
commons-codec-1.4.jar
jaxp.jar
oscore-2.2.1.jar
propertyset-1.3.jar
trove-2.1.0.jar
xalan.jar
xercesImpl.jar
jtidy-r918.jar
commons-io-2.0.jar
lombok.jar
commons-lang-2.5.jar
rome-1.0.jar
jdom.jar
poi-3.8-beta1-20110307.jar
poi-excelant-3.8-beta1-20110307.jar
poi-ooxml-3.8-beta1-20110307.jar
poi-ooxml-schemas-3.8-beta1-20110307.jar
poi-scratchpad-3.8-beta1-20110307.jar
分享到:
相关推荐
标题中的“我的xp环境配置API Index jar”表明这个压缩包可能包含了在Windows XP操作系统环境下用于配置API索引的Java(jar)文件。API Index jar通常是一个包含API接口文档或者用于快速查找和引用API的工具,这在...
接着键入命令“javac”,如果没有任何错误提示,则表示JDK环境配置正确。 ##### 2.Eclipse的安装与汉化 **2.1 Eclipse的下载** Eclipse是常用的集成开发环境之一,用于Android应用开发。官方下载地址为:...
通过上述步骤,您可以在 Windows XP 系统上成功安装和配置 Memcached,并使其与 PHP 环境集成。Memcached 的使用可以显著提高 Web 应用程序的性能,尤其是在处理大量并发请求时。希望本文档能帮助您顺利完成 ...
**MS Index Server**是微软提供的一种集成在Windows NT/2000/XP/Server 2003等操作系统中的服务,它允许开发者创建和管理全文索引,以提高应用程序的数据检索速度。通过建立索引,MS Index Server可以快速定位到包含...
本节将详细介绍如何在Windows XP环境下安装FFTW,以方便后续的开发和使用。 ##### 1. 下载FFTW预编译文件 首先,访问FFTW官方网站(http://www.fftw.org),下载最新版本的预编译文件。对于Windows XP 32位系统,推荐...
- **环境配置需求**:Windows 2000 + Apache 2 + Tomcat 4 + MySQL 4 + Mod_jk + Connector/J - **具体软件安装与配置**: - Java 2 SDK (J2SDK) 1.4.1 - Apache 2.0.45 - Tomcat 4.1.24 - MySQL 4.0.12 - ...
`phpunit.xml`是PHPUnit测试框架的配置文件,用于设定测试行为和环境。 `index.php`是入口文件,它是任何PHP Web应用的起点,负责加载框架并处理请求。`README.md`通常包含项目简介、安装指南、使用示例和贡献者...
本文将以Windows XP为例,详细介绍如何搭建Android开发环境,包括JDK的安装与配置、Android SDK的安装与配置、以及创建Android虚拟设备等步骤。 #### 二、安装与配置JDK 1. **下载JDK**: - 访问Oracle官方网站...
本文将以Windows XP系统为例,详细讲解Android开发环境的搭建过程。 **1. 安装JDK和配置Java开发环境** 由于Android应用是用Java语言编写的,因此必须先安装Java Development Kit (JDK)。JDK包含了Java运行环境JRE...
一旦环境配置完毕,开发者便可以使用集成开发环境(IDE)如Eclipse或JBuilder来编写和管理Java项目。对于简单程序,也可以使用TextPad、JEdit等文本编辑器配合命令行工具进行开发。IDE提供了代码编辑、编译、调试和...
#### 二、开发环境配置 ##### 1. 系统环境 - **推荐系统**:Windows XP + JDK 1.7.0_17 - **所需资源**: - **Android ADT Bundle**:可通过官方网址`http://developer.android.com/sdk/index.html`获取。 - **...
《log4cpp-docs-1.0:C++日志框架的...总结来说,log4cpp-docs-1.0提供了log4cpp的官方使用指南,无论是在Linux还是Windows XP环境下,都可以帮助开发者有效地利用这一强大的日志库,提高软件的可维护性和调试效率。
本章节详细介绍了Java开发环境的搭建过程,包括J2SDK的下载与安装、系统环境变量的配置以及API文档的使用。此外,还提供了一个简单的Java程序示例,帮助读者理解Java程序的基本结构。通过这些基础知识的学习,读者将...
搭建Android开发环境是每个Android开发者必经的步骤,下面将详细介绍如何在Windows XP系统下配置Android开发环境。 首先,我们需要下载以下几个关键组件: 1. **Java JDK** - Java Development Kit(JDK)是开发...