Now for some HTML output
Outputting results to System.out is not actually cutting edge technology, so
let's consider showing the directory structure in some other formats. In the
first one we'll present the output as an HTML "unordered list" using the UL- and
LI-tags. The idea is this:
start by opening an unordered list for every directory you show its name
as a list item and then open a new unordered list for every directory you
must also close the unordered list when all its contents have been written
out for every file you show its name as a list item as the last step close
the first unordered list
This is accomplished by simply subclassing MyFileStructure and implementing
new output-methods:
package hansen.playground;
public class MyFileStructureUL extends MyFileStructure {
protected void outFile(MyFile f, int level) {
String name = f.getName();
result += "<li>" + name + "</li>\n";
}
protected void outDir(MyDir d, int level) {
String name = d.getName();
result += "<ul>\n<li>" + name + "</li>\n";
}
protected void outEndDir() {
result += "</ul>\n";
}
public String getResult() {
return "<ul>\n" + super.getResult() + "</ul>";
}
}
To test this bean we write a simple jsp-file:
<jsp:useBean id="file"
class="hansen.playground.MyFileStructureUL"
scope="session" />
<%
file.setDirname("c:\\Dir-A");
file.build();
file.list();
out.println(file.getResult());
%>
Entering the name of this file in a browser will give this result:

- Figure 2 -
It's a rather simple matter to make the file names appear as hyperlinks if this is
useful. Files like Word documents, simple text-files, gif's and jpeg's--and of
course html-files--can be displayed in most browsers. You will, however, need to
place the top directory in a place where the web server can reach it.
I'll also give you a word of warning: if you plan to put an application like
this on the Internet, then be careful only to show files that you want others to
see, and never give the user any possibility to specify the name of the top
directory. Hackers have been exploiting test programs doing exactly this.
Ready for another type of output? OK, here we go.
Next step: XML
I think it's very tempting to output the results in XML format--the syntax of
an HTML unordered list has some resemblance to the XML-format. So we'll define a
"directory" and "file" element, both with a "name" attribute. The directory
element looks like this:
<directory>
<directory-name>Dir-A</directory-name>
</directory>
And this is the file element:
<file>
<file-name>File C.txt</file-name>
</file>
We need a new subclass to create the XML output:
package hansen.playground;
public class MyFileStructureXML extends MyFileStructure {
protected void outFile(MyFile f, int level) {
String name = f.getName();
result += "<file>\n<file-name>" + name + "</file-name>\n</file>\n";
}
protected void outDir(MyDir d, int level) {
String name = d.getName();
result += "<directory>\n<directory-name>" + name + "</directory-name>\n";
}
protected void outEndDir() {
result += "</directory>\n";
}
}
To test this format, we again write a small jsp-file. Note that the first
line says that the output is in xml format:
<?xml version="1.0"?>
<jsp:useBean id="fileXML"
class="hansen.playground.MyFileStructureXML"
scope="session" />
<%
fileXML.setDirname("c:\\Dir-A");
fileXML.build();
fileXML.list();
out.println(fileXML.getResult());
%>
Note:Color coded lines have been split for display purposes
New on the Java Boutique:
New Review:
Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling
API boasts simplicity, ease-of-integration, a well-rounded feature
set, and it's free!
New Applet:
Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA
sequences into three useful formats.
Elsewhere on internet.com:
WebDeveloper Java
Lots of Java information on webdeveloper.com
WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.
ScriptSearch Java
Hundreds of free Java code files to download.
jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.
|