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"); } } }