FileDocCategorySizeDatePackage
GrepSun.javaAPI DocExample2539Thu May 08 12:08:52 BST 2003None

GrepSun

public class GrepSun extends Object

Fields Summary
private static Charset
charset
private static CharsetDecoder
decoder
private static Pattern
linePattern
private static Pattern
pattern
Constructors Summary
Methods Summary
private static voidcompile(java.lang.String pat)


    // Compile the pattern from the command line
    //
         
	try {
	    pattern = Pattern.compile(pat);
	} catch (PatternSyntaxException x) {
	    System.err.println(x.getMessage());
	    System.exit(1);
	}
    
private static voidgrep(java.io.File f, java.nio.CharBuffer cb)

	Matcher lm = linePattern.matcher(cb);	// Line matcher
	Matcher pm = null;			// Pattern matcher
	int lines = 0;
	while (lm.find()) {
	    lines++;
	    CharSequence cs = lm.group(); 	// The current line
	    if (pm == null)
		pm = pattern.matcher(cs);
	    else
		pm.reset(cs);
	    if (pm.find())
		System.out.print(f + ":" + lines + ":" + cs);
	    if (lm.end() == cb.limit())
		break;
	}
    
private static voidgrep(java.io.File f)


	// Open the file and then get a channel from the stream
	FileInputStream fis = new FileInputStream(f);
	FileChannel fc = fis.getChannel();

	// Get the file's size and then map it into memory
	int sz = (int)fc.size();
	MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, sz);

	// Decode the file into a char buffer
	CharBuffer cb = decoder.decode(bb);

	// Perform the search
	grep(f, cb);

	// Close the channel and the stream
	fc.close();
    
public static voidmain(java.lang.String[] args)

	if (args.length < 2) {
	    System.err.println("Usage: java Grep pattern file...");
	    return;
	}
	compile(args[0]);
	for (int i = 1; i < args.length; i++) {
	    File f = new File(args[i]);
	    try {
		grep(f);
	    } catch (IOException x) {
		System.err.println(f + ": " + x);
	    }
	}