You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by bm...@apache.org on 2004/12/30 13:55:10 UTC
cvs commit: jakarta-lucene/src/java/org/apache/lucene/index CompoundFileReader.java
bmesser 2004/12/30 04:55:10
Modified: src/java/org/apache/lucene/index CompoundFileReader.java
Log:
add a public static void main method to list and optional extract the individual files from a compound. The original code was proposed by Garrett Rooney.
Revision Changes Path
1.15 +83 -1 jakarta-lucene/src/java/org/apache/lucene/index/CompoundFileReader.java
Index: CompoundFileReader.java
===================================================================
RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/index/CompoundFileReader.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- CompoundFileReader.java 28 Sep 2004 18:15:52 -0000 1.14
+++ CompoundFileReader.java 30 Dec 2004 12:55:10 -0000 1.15
@@ -17,12 +17,16 @@
*/
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.Arrays;
import java.util.HashMap;
import java.io.IOException;
+import java.io.FileOutputStream;
/**
@@ -233,5 +237,83 @@
}
+ }
+
+ /**
+ * Prints the filename and size of each file within a given compound file.
+ * Add the -extract flag to extract files to the current working directory.
+ * In order to make the extracted version of the index work, you have to copy
+ * the segments file from the compound index into the directory where the extracted files are stored.
+ * @param args
+ */
+ 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 [-extract] <directory> <cfsfile>");
+ return;
+ }
+
+ Directory dir = null;
+ CompoundFileReader cfr = null;
+
+ try {
+ dir = FSDirectory.getDirectory(dirname, false);
+
+ cfr = new CompoundFileReader(dir, filename);
+
+ String [] files = cfr.list();
+ Arrays.sort(files); // sort the array of filename so that the output is more readable
+
+ for (int i = 0; i < files.length; ++i) {
+ long len = cfr.fileLength(files[i]);
+
+ if (extract) {
+ System.out.println("extract " + files[i] + " with " + len + " bytes to local directory...");
+ IndexInput ii = cfr.openInput(files[i]);
+
+ FileOutputStream f = new FileOutputStream(files[i]);
+
+ // read and write with a small buffer, which is more effectiv than reading byte by byte
+ byte[] buffer = new byte[1024];
+ int chunk = buffer.length;
+ while(len > 0) {
+ final int bufLen = (int) Math.min(chunk, len);
+ ii.readBytes(buffer, 0, bufLen);
+ f.write(buffer, 0, bufLen);
+ len -= bufLen;
+ }
+
+ f.close();
+ ii.close();
+ }
+ else
+ System.out.println(files[i] + ": " + len + " bytes");
+ }
+ } catch (IOException ioe) {
+ ioe.printStackTrace();
+ }
+ finally {
+ try {
+ if (dir != null)
+ dir.close();
+ if (cfr != null)
+ cfr.close();
+ }
+ catch (IOException ioe) {
+ ioe.printStackTrace();
+ }
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: lucene-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: lucene-dev-help@jakarta.apache.org