/** * Parsing character input using StreamTokenizer class. Reads from a text file * and writes back to another text file and to the standard output stream. * Though StreamTokenizer can only extract numbers in decimal notation, * it has enough capability to parse most ASCII files. * By default, StreamTokenizer will parse numbers in decimal notation and skip * the standard white space characters: blanks, end-of-lines, and tabs. * Run TestStreamTokenizer with 2 command line arguments: the first argument is * the input file name, the second argument is the output file name. * @author Dung "Zung" Nguyen * @since Copyright 2002 - by Dung X. Nguyen - All rights reserved */ import java.io.*; public class TestStreamTokenizer { private Reader _fileReader; private Writer _fileWriter; private PrintWriter _printWriter; private void createReadWriteStreams(String inFName, String outFName) { try { // Create a Reader object that reads from an input file named inFName: _fileReader = new FileReader(inFName); // Create a Write object that writes to an output file named outFName: _fileWriter = new FileWriter(outFName); // Create a PrintWriter object to print characters to _fileWriter: _printWriter = new PrintWriter(_fileWriter); } catch (IOException e) { System.out.println(e.getMessage ()); } } public void testInOut(String inFName, String outFName) { try { // Instantiate all Read Write streams: createReadWriteStreams(inFName, outFName); // Create a Streamtokenizer object to parse _fileReader: StreamTokenizer tokenizer = new StreamTokenizer(_fileReader); // To read from the standard input, comment out the above statement // and un-comment the statement below. // StreamTokenizer tokenizer = new StreamTokenizer(new InputStreamReader(System.in)); // Do NOT ignore the end-of-line character: tokenizer.eolIsSignificant(true); // Read from _fileReader and write the token properties to // _printWriter and to System.out: int nextTok = tokenizer.nextToken(); while (StreamTokenizer.TT_EOF != nextTok) { if (StreamTokenizer.TT_NUMBER == tokenizer.ttype) { System.out.println("It's a number!"); System.out.print (tokenizer.nval + " "); _printWriter.print(tokenizer.nval + " "); } else if (StreamTokenizer.TT_WORD == tokenizer.ttype) { System.out.print (tokenizer.sval + " "); _printWriter.print (tokenizer.sval + " "); try { int num = Integer.parseInt(tokenizer.sval); System.out.println("It's a number = " + num); } catch (Exception e) { if (tokenizer.sval.charAt(0) < '0' || '9' < tokenizer.sval.charAt(0)) System.out.println("It's a word!"); else System.out.println(e); } } else if (StreamTokenizer.TT_EOL == tokenizer.ttype) { System.out.println (); _printWriter.println (); } else { System.out.println ("\nOther token type: \nnextTok = " + nextTok + "\ntokenizer.ttype = " +tokenizer.ttype + "\ntokenizer.sval = " + tokenizer.sval + "\ntokenizer.toString() = " + tokenizer.toString ()); _printWriter.println ("\nOther token type: \nnextTok = " + nextTok + "\ntokenizer.ttype = " +tokenizer.ttype + "\ntokenizer.sval = " + tokenizer.sval + "\ntokenizer.toString() = " + tokenizer.toString ()); } nextTok = tokenizer.nextToken(); } System.out.println ("\nDone!"); _printWriter.close(); // IMPORTANT! } catch (IOException e) { System.out.println(e.getMessage ()); } } /** * Run TestStreamTokenizer with 2 command line arguments. * @param arg[0] the input file name. * @param arg[1] the output file name. */ public static void main(String arg[]) { new TestStreamTokenizer().testInOut(arg[0], arg[1]); } }