![]()
Lecture Topic:
![]()
Tokenizers contd...
At the end of the file tokens.nextToken( ) returns tokens.TT_EOF
static public void write_filtered_href_file(String input_name, String output_name) {
System.out.println("Filtering:\t" + input_name +"\t>\t"+output_name);
try {
FileInputStream input_stream = new FileInputStream(input_name);
StreamTokenizer tokens = new StreamTokenizer(input_stream);
FileOutputStream output_stream = new FileOutputStream(output_name);
PrintStream output = new PrintStream(output_stream);
int i;
int next = 0;
tokens.resetSyntax();
tokens.wordChars(0,255);
tokens.quoteChar('"');
while ((next = tokens.nextToken()) != tokens.TT_EOF) {
switch (next) {
case '"':
output.print('"');
for (i=0;i<tokens.sval.length();i++) {
if (tokens.sval.charAt(i) == ' ')
{output.print("%20");}
else
{output.print(tokens.sval.charAt(i));}
} //end for
output.print('"');
break;
case tokens.TT_WORD:
output.print(tokens.sval+" ");
break;
case tokens.TT_NUMBER:
output.print(tokens.nval+" ");
break;
case tokens.TT_EOL:
output.println();
break;
} // end switch
} // end while
input_stream.close();
output_stream.close();
} // end try
catch (Exception exe)
{System.out.println("list_filtered_href_file:er!");}
} // write_filtered_hrefs
tokens.nextToken( ) returns
Summary :
To do file I/O
To read from an input file
FileInputStream input_file = new FileInputStream(file); StreamTokenizer tokens = new StreamTokenizer(input_file);
To read until EOF
while ((next = tokens.nextToken()) != tokens.TT_EOF)
{
switch (next) {
case '"':
System.out.print('"');
StringTokenizer st =
new StringTokenizer(tokens.sval," ");
while (st.hasMoreTokens()) {
System.out.print(st.nextToken());
if (st.countTokens() > 1)
{System.out.print("%20");}
}
System.out.print('"');
break;
case tokens.TT_WORD:
System.out.print(tokens.sval+" ");
break;
case tokens.TT_NUMBER:
System.out.print(tokens.nval+" ");
break;
case tokens.TT_EOL:
System.out.println();
break;
}
}
System.out.println();
input_file.close();
}
How to Write Files ?
FileOutputStream output_stream = new FileOutputStream(output_name); output_stream.close();
You can write Bytes to a output stream
To write String instances, you need a PrintStream instance.
PrintStream output = new PrintStream( outputFile );
outputFile - a FileOutputStream instance.
Summary :
import java.io.* ;
FileOutputStream fOS = new FileOutputStream( filestream );
PrintStream pS = new PrintStream( fOS );
pS.print("I am writing to a file");
pS.println("Just like System.out");
fOS.close( );
import java.awt.*;
import java.io.*;
class MenuBarFrame extends Frame {
MenuBar menuBar;
String str;
private int JavaIdentifiersMayBeOfUnlimitedLengthTheycanhavenoSpacesNoOperatorsTheyCANHave1234567890NumbersOrDigitsButTheyMustStartWithLetters = 0;
private String science_items [] = {
"Image Processing","-",
"Audio Processing",
"surface",
"benchmark",
"-",
"Toy Calculator"
};
import java.util.*;
import java.awt.*;
import java.io.*;
abstract class Geometry {
static public ObservableInt grid_width = new ObservableInt(20);
static public ObservableInt n = new ObservableInt(1); // order;
static public ObservableInt lambda = new ObservableInt(632);
static public ObservableInt step_size = new ObservableInt(20);
static public double Pi_on_180 = Math.PI / 180;
static public String APP_NAME = "DiffCAD";
static public void print(PrintStream out) {
Print.output = out;
print();
Print.output = System.out;
} // print
static public void print() {
laser.print();
camera.print();
wedge.print();
grating.print();
System.out.println("Lambda = "+ lambda.getValue());
System.out.println("s = " + s());
} // print
import java.util.*;
import java.awt.*;
class Laser extends Shape{
double W = 10;
double H = 20;
void print() {
Print.class_name(this);
print("Rotation= "+ rotation.getValue() + "\t");
pc.println();
// output to console, not file
printNG();
}
Print.print( ); - silly naming conventions Print.classname( this ); OK void print_class_name( ){Geometry.output.print( this.getclass( ).getName( ) + "\t" );} static void class_name( Object o ){Geometry.output.print( o.getclass( ).getName( ) + "\t" );}
try{
- Get filename event
- ask user for a filename
- open file for read
- read file
- close file
}catch{Errors ;} if( arg.equals("Open") ) {open( );}
static public void read_data_file(String file,double data[]) {
System.out.println("processing:\t" + file);
try {
FileInputStream input_file = new
FileInputStream(file);
StreamTokenizer tokens = new StreamTokenizer(input_file);
int next = 0;
int num = 0;
while ((next = tokens.nextToken()) != tokens.TT_EOF)
{
switch (next) {
case tokens.TT_WORD:
break;
case tokens.TT_NUMBER:
data[num] = (double) tokens.nval;
System.out.println(num+": "+ data[num]);
num = num + 1;
break;
case tokens.TT_EOL:
break;
}
}
input_file.close();
}
catch (Exception exe)
{System.out.println("list_filtered_href_file:er!");}
}
}
Objective : Read only Numbers, Ignore text
New Idea : tokenizer class does all the parsing
New class: StreamTokenizer

More Advanced Parsing : Filter HREF in HTML
EX:
Problem Statement :
Write ls to list files.
Last Update:
04/09/97