Index: FSDirectory.java =================================================================== RCS file: /home/cvspublic/jakarta-lucene/src/java/org/apache/lucene/store/FSDirectory.java,v retrieving revision 1.36 diff -u -r1.36 FSDirectory.java --- FSDirectory.java 28 Sep 2004 20:45:26 -0000 1.36 +++ FSDirectory.java 16 Oct 2004 19:42:34 -0000 @@ -16,11 +16,13 @@ * limitations under the License. */ +import java.io.FileFilter; import java.io.IOException; import java.io.File; import java.io.RandomAccessFile; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.util.ArrayList; import java.util.Hashtable; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -36,6 +38,7 @@ * @author Doug Cutting */ public class FSDirectory extends Directory { + /** This cache of directories ensures that there is a unique Directory * instance per path, so that synchronization on the Directory can be used to * synchronize access between readers and writers. @@ -79,6 +82,50 @@ } } + /** FileFilter for filenames known to lucene */ + private final FileFilter filter = new FileFilter() { + public boolean accept(File file) { + final String name = file.getName(); + if (name.equals("segments")) + return true; + else if (name.equals("deletable")) + return true; + else if (name.endsWith("cfs")) + return true; + else if (name.endsWith("fnm")) + return true; + else if (name.endsWith(".fdx")) + return true; + else if (name.endsWith(".fdt")) + return true; + else if (name.endsWith(".tis")) + return true; + else if (name.endsWith(".tii")) + return true; + else if (name.endsWith(".frq")) + return true; + else if (name.endsWith(".prx")) + return true; + else if (name.endsWith(".tvx")) + return true; + else if (name.endsWith(".tvd")) + return true; + else if (name.endsWith(".tvf")) + return true; + else if (name.endsWith(".del")) + return true; + + /** + * possible norms file + * this could be made better when switching to Java 1.4 level code using a regexp + */ + else if (name.indexOf(".f") > 0) + return true; + else + return false; + } + }; + /** A buffer optionally used in renameTo method */ private byte[] buffer = null; @@ -157,7 +204,8 @@ if (!directory.mkdirs()) throw new IOException("Cannot create directory: " + directory); - String[] files = directory.list(); // clear old files + // use list(filter) to delete only files belonging to lucene + String[] files = list(filter); // clear old files for (int i = 0; i < files.length; i++) { File file = new File(directory, files[i]); if (!file.delete()) @@ -180,6 +228,21 @@ return directory.list(); } + /** Returns an array of strings for filenames belonging to lucene */ + private String[] list(FileFilter filter) { + String names[] = list(); + if ((names == null) || (filter == null)) { + return names; + } + ArrayList v = new ArrayList(); + for (int i = 0 ; i < names.length ; i++) { + if (filter.accept(new File(directory, names[i]))) { + v.add(names[i]); + } + } + return (String[])(v.toArray(new String[0])); + } + /** Returns true iff a file with the given name exists. */ public boolean fileExists(String name) { File file = new File(directory, name);