FileDocCategorySizeDatePackage
GrepReader.javaAPI DocExample1875Mon Sep 22 13:30:32 BST 1997None

GrepReader.java

// This example is from _Java Examples in a Nutshell_. (http://www.oreilly.com)
// Copyright (c) 1997 by David Flanagan
// This example is provided WITHOUT ANY WARRANTY either expressed or implied.
// You may study, use, modify, and distribute it for non-commercial purposes.
// For any commercial use, see http://www.davidflanagan.com/javaexamples

import java.io.*;

/**
 * This class is a BufferedReader that filters out all lines that
 * do not contain the specified pattern.
 **/
public class GrepReader extends BufferedReader {
  String pattern;  // The string we are going to be matching.
  
  /** Pass the stream to our superclass, and remember the pattern ourself */
  public GrepReader(Reader in, String pattern) {
    super(in);
    this.pattern = pattern;
  }
    
  /**
   * This is the filter: call our superclass's readLine() to get the
   * actual lines, but only return lines that contain the pattern.
   * When the superclass readLine() returns null (EOF), we return null.
   **/
  public final String readLine() throws IOException {
    String line;
    do { line = super.readLine(); }
    while ((line != null) && line.indexOf(pattern) == -1);
    return line;
  }

  /**
   * This class demonstrates the use of the GrepReader class.
   * It prints the lines of a file that contain a specified substring.
   **/
  public static class Test {
    public static void main(String args[]) {
      try {
        if (args.length != 2) 
          throw new IllegalArgumentException("Wrong number of arguments");
        GrepReader in = new GrepReader(new FileReader(args[1]), args[0]);
        String line;
        while((line = in.readLine()) != null) System.out.println(line);
        in.close();
      }
      catch (Exception e) { 
        System.err.println(e);
        System.out.println("Usage: java GrepReader$Test <pattern> <file>");
      }
    }
  }
}