mirror of https://github.com/apache/lucene.git
move static main method to list and optionally extract the individual file from a compound index from CompoundFileReader to IndexReader. It is more cleaner to have the method in IndexReader because it is well documented and public available.
git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@151381 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ecd4a7256d
commit
a14e0acf09
|
@ -238,82 +238,5 @@ class CompoundFileReader extends Directory {
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,13 @@ import org.apache.lucene.document.Field;
|
||||||
import org.apache.lucene.search.Similarity;
|
import org.apache.lucene.search.Similarity;
|
||||||
import org.apache.lucene.store.Directory;
|
import org.apache.lucene.store.Directory;
|
||||||
import org.apache.lucene.store.FSDirectory;
|
import org.apache.lucene.store.FSDirectory;
|
||||||
|
import org.apache.lucene.store.IndexInput;
|
||||||
import org.apache.lucene.store.Lock;
|
import org.apache.lucene.store.Lock;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -668,4 +671,82 @@ public abstract class IndexReader {
|
||||||
directory.makeLock(IndexWriter.WRITE_LOCK_NAME).release();
|
directory.makeLock(IndexWriter.WRITE_LOCK_NAME).release();
|
||||||
directory.makeLock(IndexWriter.COMMIT_LOCK_NAME).release();
|
directory.makeLock(IndexWriter.COMMIT_LOCK_NAME).release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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: org.apache.lucene.index.IndexReader [-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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue