O'Reilly logo

Java Cookbook by Ian F. Darwin

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Text-File Databases

Problem

You wish to treat a text file as a database.

Solution

Write an Accessor class that returns objects of the correct type.

Discussion

On the JabaDot web site (see Section 18.13) there is a list of users. Each user has a login name, full name, password, email address, privilege level, and so forth, and is represented by a User object. These are stored in the User database.

There are several versions of this database, so I have an abstract class to represent all the user data accessors, called UserDB . One of its main functions is to read the database; this can be done in the constructor or in the getUsers( ) method.

Of course, for efficiency, we want to do this reading only once, even though we may have many users visiting the site. So the design pattern (see the Introduction to Chapter 8) known as singleton (ensure one single instance exists) is used; anybody wanting a UserDB object does not construct one (the constructor is private), but must call getInstance( ). Unsurprisingly, getInstance( ) returns the same value to anyone who calls it. The only implication of this is that some of the methods must be synchronized (see Chapter 24) to prevent complications when more than one user accesses the (single) UserDB object concurrently.

The code in Example 20-1 uses a class called JDConstants (JabaDot constants), which is a wrapper around a Properties object (see Section 7.4) to get values such as the location of the database.

Example 20-1. UserDB.java

package jabadot; ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required