P4.java
import java.io.*;
import java.util.*;
import org.xml.sax.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.sax.*;
import javax.xml.transform.stream.*;
/**
Build and output a DOM tree.
*/
public class P4
{
public static void main(String[] argv)
{
String topdir = "D:/CIS370/Web/demo/";
try {
// Create a new DOM document.
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder =
factory.newDocumentBuilder();
Document doc =
builder.newDocument();
// Build a DOM tree describing a directory hierarchy.
Element root = doc.createElement("root");
root.setAttribute("name",topdir);
doc.appendChild(root);
File f = new File(topdir);
if (f.exists() && f.isDirectory())
oneLevel(doc,root,f);
else
System.out.println("Can't find root.");
// Spit out this DOM as an HTML file.
File styleSheet = new File("P4.xsl");
StreamSource styleSource = new StreamSource(styleSheet);
Transformer t =
TransformerFactory.
newInstance().
newTransformer(styleSource);
t.transform(new DOMSource(doc),
new StreamResult(
new FileOutputStream(
new File("P4.html"))));
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
Recursively generate a DOM tree describing a directory hierarchy.
*/
private static void oneLevel(Document doc,Element node,File f)
{
if (f.isDirectory()) {
File[] files = f.listFiles();
Element e = doc.createElement("directory");
e.setAttribute("name",f.getName());
node.appendChild(e);
for (int i=0; i<files.length; i++)
oneLevel(doc,e,files[i]);
}
else {
Element e = doc.createElement("file");
e.setAttribute("name",f.getName());
e.setAttribute("length",
(new Long(f.length()).toString()));
node.appendChild(e);
}
}
}