advertisement
javaboutique
Search Tips
Articles  |   Tutorials  |   Reviews  |   Tools  |   by Category  |   by Date  |   by Name  |   Submit  |   Source  |   Forums  |  
javaboutique
Browse DevX


Partners & Affiliates











advertisement


Tutorials : Working with files and directories in Java :
Contents
Working with files and directories in Java
The MyDir class
A directory structure for testing
Now for some HTML output
Showing XML in Internet Explorer

A directory structure for testing

For testing our programs we need a simple directory structure, with a few files and a few directories. Something along the lines of this:

- Figure 1 -

Here we have two files in "Dir-A", and one in each of the other two directories. If we run "Test1" above with the parameter "c:\Dir-A" we get this output:

Dir: c:\Dir-A
Dir: c:\Dir-A\Dir-B
Dir: c:\Dir-A\Dir-B\Dir-C
File: c:\Dir-A\Dir-B\Dir-C\File C.txt
File: c:\Dir-A\Dir-B\File B.txt
File: c:\Dir-A\File A1.txt
File: c:\Dir-A\File A2.txt

The output seems to be correct, but is of course not as nice as the graphical result in Figure 1.

Let's stop for a while and consider what could be improved in the current solution. First of all the output from the "list" method could be more readable, maybe by using some kind of indentation like in the graphical view. This could be achieved by adding a "level" parameter to the "list" method which is increased by one for every recursive call to "list". We could then indent each line for example 2 times "level" spaces. At the same time we could omit the path value. This would give this output:

Dir: Dir-A
  Dir: Dir-B
    Dir: Dir-C
      File: File C.txt
    File: File B.txt
  File: File A1.txt
  File: File A2.txt

Much better, but why tie up the solution to delivering the output only to System.out? We could have a much more generic solution if we define a couple of methods that contain the implementation of the output formatting and have them store the output in a member variable in the class. A get-method can be used to retrieve the final, formatted string.

Coding a more general solution

I'll sketch this solution here (the new code is marked with bold):

public class MyFileStructure{ 
  private String dirname;
  private MyDir mdir;
  protected String result;

public String getResult() {
    return result;
  }

. . . 
  
  /*
  * Display the name of the file on System.out   
  */
  protected void outFile(MyFile f, int level) {
    String name = f.getName();
    result += repeat(" ",2*level) + "File: " + name + "\n";
  }  
  
  /*
  * Display the name of the directory on System.out
  */
  protected void outDir(MyDir d, int level) {
    String name = d.getName();
    result += repeat(" ",2*level) + "Dir: " + name + "\n";
  }  
  
  /*
  * Close display of the directory 
  */
  protected void outEndDir() {
  }  
  
  public void list() {
    if (mdir == null) {
      System.out.println("Not a valid directory");
      return;
    }  
    result = "";
    outDir(mdir, 0);
    list(mdir, 0);
    outEndDir();
  }
  
  private void list(MyDir m, int level) {
    level++;
    Vector md = m.getDirs();
    for (int i = 0; i < md.size(); i++) {
      MyDir d = (MyDir)md.elementAt(i);
      outDir(d, level);
      list(d, level); // recursive call
      outEndDir();
    }  
    Vector mf = m.getFiles();
    for (int i = 0; i < mf.size(); i++) {
      MyFile f = (MyFile)mf.elementAt(i);
      outFile(f,level); 
    }  
  }  
 
}

The complete MyFileStructure also includes a utility method "repeat".

The test program will now have to write the results to System.out, so we must add this line to the program "Test1":

System.out.println(mf.getResult()); 

How to Add Java Applets to Your Site

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.

 Microsoft Visual Studio 2010 Showcase
 Avaya Developer Showcase
 MSDN Spotlight
 PHP for Windows Showcase
XML error: undefined entity at line 39
advertisement
Receive Articles via our XML/RSS feed
Receive Articles via our XML/RSS feed

JavaBytes
Internet Cyclone
This powerful, easy-to-use, internet optimizer is for Windows 95, 98, ME, NT, 2000 and XP. It's designed to automatically optimize your Windows settings, boosting your Internet connection up to 200%.

Windows 7: From Beta to Final Code in One Year
Google Shows Off Chrome OS, Releases Source
Microsoft Shows Off Silverlight 4, IE9 Plans
Metasploit Expands Vulnerability Test Framework
HyperCard Reborn?
Fedora 12 Takes Aim at Linux Networking
Top Supercomputer Nearly Doubles in Speed
Fedora 12 Linux Tackles Virtualization
Apple Gives iPhone Developers App Status Tracker
Novell Sets OpenSUSE 11.2 Free

Creating Custom Export Filters for StarOffice with XSLT
WPF Wonders: Using DataTemplates
Crystal Reports Family Offers Options for Developers
Avaya Aura Session Manager video
Avaya Aura Overview video
Exploring HTML 5's Audio/Video Multimedia Support
Overriding Virtual Functions? Use C++0x Attributes to Avoid Bugs.
Understanding the Cloud Computing Security Vulnerabilities
Cisco and IBM Target a Greener World
Upgrade to Visual Studio 2010 with the Ultimate Offer

Advertising Info  |   Member Services  |   Contact Us  |   Help  |   Feedback  |   Site Map  |   Network Map  |   About

internet.commediabistro.comJusttechjobs.comGraphics.com

Search:

WebMediaBrands Corporate Info

Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | Shopping | E-mail Offers | Freelance Jobs