import java.io.*;
/** Invoerfout waarbij ten onrechte een cijferteken
* werd gelezen.
* @author Lieven Smits
* @version 21 juli 2000
*/
class CijferGelezen extends IOException {
char teken;
/** Construeer een onbepaalde invoerfout.
* Het gebruik van deze constructor wordt
* afgeraden: construeer liever een
* CijferGelezen
aan de hand van een
* zojuist gelezen teken.
*/
CijferGelezen() {
teken = 0;
}
/** Construeer een invoerfout met
* gegeven abnormaal invoerteken.
* @param teken
* Het abnormale invoerteken.
*/
CijferGelezen(char teken) {
this.teken = teken;
}
/** Geef een zinvolle String
-voorstelling
* van de invoerfout. Dit komt erop neer dat we
* het foutieve teken teruggeven in de vorm van
* een String
van lengte één.
* @return
* Een String van lengte 1 met het gewraakte cijferteken.
*/
public String toString() {
return new String("" + teken);
}
}
/** Programma om het aantal asterisken in een bestand
* te tellen.
* @author Lieven Smits
* @version 21 juli 2000
*/
public class TelSterretjes {
/** Tel het aantal asterisken in het bestand waarvan
* de naam in de eerste opdrachtregel-parameter zit.
* @param args[0]
* Naam van het invoerbestand.
* @throws java.io.IOException
* Algemene invoerfout.
*/
public static void main(String[] args) throws IOException {
FileReader bestand = null;
try {
bestand = new FileReader(args[0]);
int teller = 0;
int teken;
while ((teken = bestand.read()) != -1)
if (teken == '*')
teller++;
else if (Character.isDigit((char) teken))
throw new CijferGelezen((char) teken);
System.out.println("Aantal sterretjes: " + teller);
}
catch (FileNotFoundException e) {
System.out.println("Bestand " + args[0] + " niet gevonden");
}
catch (CijferGelezen e) {
System.out.println("Cijfer " + e + " gelezen");
}
catch (IOException e) {
System.out.println("Fout bij het lezen van " + args[0]);
}
finally {
if (bestand != null) {
System.out.println("Afsluiten invoer");
bestand.close();
}
else
System.out.println("Invoer was niet geopend");
}
}
}