FileDocCategorySizeDatePackage
Directory.javaAPI DocApache Lucene 2.1.06483Wed Feb 14 10:46:40 GMT 2007org.apache.lucene.store

Directory

public abstract class Directory extends Object
A Directory is a flat list of files. Files may be written once, when they are created. Once a file is created it may only be opened for read, or deleted. Random access is permitted both when reading and writing.

Java's i/o APIs not used directly, but rather all i/o is through this API. This permits things such as:

  • implementation of RAM-based indices;
  • implementation indices stored in a database, via JDBC;
  • implementation of an index as a single file;
Directory locking is implemented by an instance of {@link LockFactory}, and can be changed for each Directory instance using {@link #setLockFactory}.
author
Doug Cutting

Fields Summary
protected LockFactory
lockFactory
Holds the LockFactory instance (implements locking for this Directory instance).
Constructors Summary
Methods Summary
public voidclearLock(java.lang.String name)
Attempt to clear (forcefully unlock and remove) the specified lock. Only call this at a time when you are certain this lock is no longer in use.

param
lockName name of the lock to be cleared.

    if (lockFactory != null) {
      lockFactory.clearLock(name);
    }
  
public abstract voidclose()
Closes the store.

public static voidcopy(org.apache.lucene.store.Directory src, org.apache.lucene.store.Directory dest, boolean closeDirSrc)
Copy contents of a directory src to a directory dest. If a file in src already exists in dest then the one in dest will be blindly overwritten.

param
src source directory
param
dest destination directory
param
closeDirSrc if true, call {@link #close()} method on source directory
throws
IOException

      final String[] files = src.list();
      byte[] buf = new byte[BufferedIndexOutput.BUFFER_SIZE];
      for (int i = 0; i < files.length; i++) {
        IndexOutput os = null;
        IndexInput is = null;
        try {
          // create file in dest directory
          os = dest.createOutput(files[i]);
          // read current file
          is = src.openInput(files[i]);
          // and copy to dest directory
          long len = is.length();
          long readCount = 0;
          while (readCount < len) {
            int toRead = readCount + BufferedIndexOutput.BUFFER_SIZE > len ? (int)(len - readCount) : BufferedIndexOutput.BUFFER_SIZE;
            is.readBytes(buf, 0, toRead);
            os.writeBytes(buf, toRead);
            readCount += toRead;
          }
        } finally {
          // graceful cleanup
          try {
            if (os != null)
              os.close();
          } finally {
            if (is != null)
              is.close();
          }
        }
      }
      if(closeDirSrc)
        src.close();
  
public abstract org.apache.lucene.store.IndexOutputcreateOutput(java.lang.String name)
Creates a new, empty file in the directory with the given name. Returns a stream writing this file.

public abstract voiddeleteFile(java.lang.String name)
Removes an existing file in the directory.

public abstract booleanfileExists(java.lang.String name)
Returns true iff a file with the given name exists.

public abstract longfileLength(java.lang.String name)
Returns the length of a file in the directory.

public abstract longfileModified(java.lang.String name)
Returns the time the named file was last modified.

public org.apache.lucene.store.LockFactorygetLockFactory()
Get the LockFactory that this Directory instance is using for its locking implementation. Note that this may be null for Directory implementations that provide their own locking implementation.

      return this.lockFactory;
  
public java.lang.StringgetLockID()
Return a string identifier that uniquely differentiates this Directory instance from other Directory instances. This ID should be the same if two Directory instances (even in different JVMs and/or on different machines) are considered "the same index". This is how locking "scopes" to the right index.

      return this.toString();
  
public abstract java.lang.String[]list()
Returns an array of strings, one for each file in the directory.

public org.apache.lucene.store.LockmakeLock(java.lang.String name)
Construct a {@link Lock}.

param
name the name of the lock file

      return lockFactory.makeLock(name);
  
public abstract org.apache.lucene.store.IndexInputopenInput(java.lang.String name)
Returns a stream reading an existing file.

public abstract voidrenameFile(java.lang.String from, java.lang.String to)
Renames an existing file in the directory. If a file already exists with the new name, then it is replaced. This replacement is not guaranteed to be atomic.

deprecated

public voidsetLockFactory(org.apache.lucene.store.LockFactory lockFactory)
Set the LockFactory that this Directory instance should use for its locking implementation. Each * instance of LockFactory should only be used for one directory (ie, do not share a single instance across multiple Directories).

param
lockFactory instance of {@link LockFactory}.

      this.lockFactory = lockFactory;
      lockFactory.setLockPrefix(this.getLockID());
  
public abstract voidtouchFile(java.lang.String name)
Set the modified time of an existing file to now.