/** * */ package edu.berkeley.nlp.util; import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.io.ObjectInputStream; import java.io.Serializable; import java.util.Arrays; import edu.berkeley.nlp.util.Logger; /** * @author dburkett * */ public class ObjectReader<T extends Serializable> { private final File folder; private final String[] files; private ObjectInputStream currentStream = null; private int currentIndex = -1; private boolean currentStreamHasNext = false; public ObjectReader(File folder, final String filenameFilter) { this.folder = folder; files = folder.list(new FilenameFilter() { public boolean accept(File dir, String name) { return name.contains(filenameFilter); } }); Arrays.sort(files); openNextStream(); } public void reset() { currentIndex = -1; openNextStream(); } private void openNextStream() { try { if (currentStream != null) { currentStream.close(); currentStream = null; } currentIndex++; if (currentIndex < files.length) { currentStream = IOUtils.openObjIn(new File(folder, files[currentIndex])); currentStreamHasNext = currentStream.readBoolean(); } } catch(IOException e) { Logger.err("Error opening forest file: " + e); currentStream = null; } } @SuppressWarnings("unchecked") public T getNextObject() { try { while (!currentStreamHasNext && currentStream != null) { openNextStream(); } if (currentStream == null) { return null; } T nextObject = (T)currentStream.readObject(); currentStreamHasNext = currentStream.readBoolean(); return nextObject; } catch(Exception e) { Logger.err("Error reading object: " + e); return null; } } }