org.openanzo.jdbc.utils.FileLineIterator.java Source code

Java tutorial

Introduction

Here is the source code for org.openanzo.jdbc.utils.FileLineIterator.java

Source

/*******************************************************************************
 * Copyright (c) 2004, 2007 IBM Corporation and Cambridge Semantics Incorporated.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * File:        $Source: /cvsroot/slrp/common/com.ibm.adtech.jdbc.utils/src/com/ibm/adtech/jdbc/utils/FileLineIterator.java,v $
 * Created by:  Joe Betz
 * Created on:  1/30/2006
 * Revision:   $Id: FileLineIterator.java 176 2007-07-31 14:22:30Z mroy $
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *     Cambridge Semantics Incorporated - Fork to Anzo
 *******************************************************************************/
package org.openanzo.jdbc.utils;

import java.io.IOException;
import java.io.LineNumberReader;
import java.io.Reader;
import java.util.Iterator;
import java.util.NoSuchElementException;

import org.apache.commons.lang.UnhandledException;

/**
 * Wrapper for iterating over the lines of an input stream.
 * 
 * @author Joe Betz
 * 
 */
class FileLineIterator implements ClosableIterator<String> {

    private final Reader reader;

    private final LineNumberReader lnr;

    private String line;

    private boolean fetchedNext = false;

    private boolean hasNext = false;

    /**
     * Create an Iterator for an InputStreamReader
     * 
     * @param reader
     *            source of data
     */
    protected FileLineIterator(Reader reader) {
        this.reader = reader;
        this.lnr = new LineNumberReader(reader);
    }

    public void close() {
        try {
            if (reader != null)
                reader.close();
            if (lnr != null)
                lnr.close();
        } catch (IOException e) {
            throw new UnhandledException(e);
        }
    }

    public boolean hasNext() {
        if (fetchedNext)
            return hasNext;
        fetchedNext = true;
        try {
            line = lnr.readLine();
            return hasNext = (line != null);
        } catch (IOException e) {
            throw new UnhandledException(e);
        }
    }

    public String next() {
        if (!hasNext())
            throw new NoSuchElementException();
        fetchedNext = false;
        return line;
    }

    public void remove() {
        throw new UnsupportedOperationException();
    }

    public Iterator<String> iterator() {
        return this;
    }
}