TestStreamTokenizer.java
Created with JBuilder |
/**
* 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]);
}
}
TestStreamTokenizer.java
Created with JBuilder |