Hello, I understand the technical reason for main() there, but logically this belongs to an external utility class, I think.
Otis --- Bernhard Messer <[EMAIL PROTECTED]> wrote: > hi, > > i already had a look at Garrett's implementation. I made some smaller > > changes to improve the performance when extracting the files from the > > compound. All tests work fine and the index is usable after > extraction. > The new functionality is added as a public static void main () to > CompoundFileReader because of the reduced visibility (package) of > CompoundFileReader itself. It will be committed this afternoon. > > Bernhard > > > Doug Cutting wrote: > > > >> It would be useful to have a command-line utility (i.e., a static > >> main(String[]) method somewhere) that lists the files and sizes > >> contained inside a CFS file, and perhaps even an option to unpack > it. > >> Anyone care to contribute this method? > > > > > > Here's a diff to add this functionality to CompoundFileReader. > > Comments are of course welcome, as I'm not that fantastic a Java > hacker. > > > > -garrett > > > >------------------------------------------------------------------------ > > > >Index: src/java/org/apache/lucene/index/CompoundFileReader.java > >=================================================================== > >RCS file: > /home/cvspublic/jakarta-lucene/src/java/org/apache/lucene/index/CompoundFileReader.java,v > >retrieving revision 1.14 > >diff -u -r1.14 CompoundFileReader.java > >--- src/java/org/apache/lucene/index/CompoundFileReader.java 28 Sep > 2004 18:15:52 -0000 1.14 > >+++ src/java/org/apache/lucene/index/CompoundFileReader.java 25 Dec > 2004 04:25:11 -0000 > >@@ -17,12 +17,14 @@ > > */ > > > > import org.apache.lucene.store.Directory; > >+import org.apache.lucene.store.FSDirectory; > > import org.apache.lucene.store.IndexInput; > > import org.apache.lucene.store.BufferedIndexInput; > > import org.apache.lucene.store.IndexOutput; > > import org.apache.lucene.store.Lock; > > import java.util.HashMap; > > import java.io.IOException; > >+import java.io.FileOutputStream; > > > > > > /** > >@@ -233,5 +235,61 @@ > > } > > > > > >+ } > >+ > >+ public static void main(String [] args) { > >+ String dirname = null, filename = null; > >+ boolean extract = false; > >+ > >+ for (int i = 0; i < args.length; ++i) { > >+ if (args[i].equals("-extract")) { > >+ extract = true; > >+ } else if (dirname == null) { > >+ dirname = args[i]; > >+ } else if (filename == null) { > >+ filename = args[i]; > >+ } > >+ } > >+ > >+ if (dirname == null || filename == null) { > >+ System.out.println("Usage: CompoundFileReader directory > cfsfile"); > >+ System.out.println(""); > >+ System.out.println("Prints the filename and size of > each file " > >+ + "within cfsfile."); > >+ System.out.println(""); > >+ System.out.println("Add the -extract flag to extract > files to the " > >+ + "current working directory."); > >+ > >+ return; > >+ } > >+ > >+ try { > >+ Directory dir = FSDirectory.getDirectory(dirname, > false); > >+ > >+ CompoundFileReader cfr = new CompoundFileReader(dir, > filename); > >+ > >+ String [] files = cfr.list(); > >+ > >+ for (int i = 0; i < files.length; ++i) { > >+ long len = cfr.fileLength(files[i]); > >+ > >+ System.out.println(files[i] + "\t: " + len + " > bytes"); > >+ > >+ if (extract) { > >+ IndexInput ii = cfr.openInput(files[i]); > >+ > >+ FileOutputStream f = new > FileOutputStream(files[i]); > >+ > >+ while (len-- != 0) { > >+ byte b = ii.readByte(); > >+ f.write(b); > >+ } > >+ > >+ f.close(); > >+ } > >+ } > >+ } catch (IOException ioe) { > >+ ioe.printStackTrace(); > >+ } > > } > > } > > > > > > > >------------------------------------------------------------------------ > > > >--------------------------------------------------------------------- > >To unsubscribe, e-mail: [EMAIL PROTECTED] > >For additional commands, e-mail: [EMAIL PROTECTED] > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]