java:exceptions_throwing

This is an old revision of the document!


Δημιουργία νέων τύπων εξαιρέσεων και πυροδότηση εξαίρεσης

Στις προηγούμενες ενότητες είδαμε τον τρόπο με τον οποίο χειριζόμαστε μια εξαίρεση. Μέχρι αυτό το σημείο έχουμε αναφερθεί σε εξαιρέσεις που παρέχονται από κλάσεις του συστήματος. Πως όμως δημιουργούνται αυτές οι εξαιρέσεις και πως και εμείς μπορούμε να καλέσουμε μια εξαίρεση;

Επανερχόμενοι στο παράδειγμα ανάγνωσης ενός αρχείου ας υποθέσουμε ότι θέλουμε να δημιουργούμε μία εξαίρεση αν το αρχείο είναι άδειο, δηλ δεν περιέχει κανένα χαρακτήρα. Για τον σκοπό αυτό δημιουργούμε ένα νέο τύπο εξαίρεσης με όνομα EmptyFileException.

EmptyFileException.java
public class EmptyFileException extends java.lang.Exception {
}

Όπως τονίσαμε και παραπάνω η εξαίρεση είναι και αυτή ένα αντικείμενο. Για να καλέσουμε ένα αντικείμενο εξαίρεσης το μόνο που έχουμε να κάνουμε είναι να βάλουμε τη δεσμευμένη λέξη throw και δίπλα το αντικείμενο της εξαίρεσης που θέλουμε να καλέσουμε. Στο παρακάτω παράδειγμα, εάν μετά την ολοκλήρωση διαβάσματος του αρχείου αντιληφθούμε ότι το αρχείο που διαβάσαμε ήταν κενό τότε το πρόγραμμα μας δημιουργεί το παραπάνω Exception. Δείτε τον κώδικα.

import java.io.*;
import java.lang.*;
 
public class WholeFileReader {
 
  public String readFile(String path) throws FileNotFoundException, EmptyFileException {
    FileReader fReader = null;
 
    try {
      File file = new File (path);
      fReader = new FileReader(file);
      BufferedReader in = new BufferedReader(fReader);
      String inputLine;
      StringBuffer strDocument = new StringBuffer();
      try {
        while ((inputLine = in.readLine()) != null) {
          strDocument.append(inputLine);
        }
 
      }
      catch(IOException ex) {
        System.out.println("IOException occured while reading from file "+path);
      }
      if( strDocument.toString().isEmpty() ) {
         throw new EmptyFileException();
      }
      return strDocument.toString();
    }
 
    finally {
      if( fReader != null) {
        try {
          //System.out.println("Closing file");
          fReader.close();
        } 
        catch(IOException ex) {
          System.out.println("IOException occured while reading from file "+path);
        }
      }
    }
 
  }
 
  public static void main(String args[]) {
    WholeFileReader wfr = new WholeFileReader();
    try {
      System.out.println(wfr.readFile(args[0]) );
    }
    catch(IndexOutOfBoundsException ex) {
      System.out.println("No file has been specified!\n");
    }
    catch(FileNotFoundException ex) {
      System.out.println("The specified file was not found at "+ args[0]);
    }
    catch(EmptyFileException ex) {
      System.out.println("File is empty!!!");
    }
  }
 
}
java/exceptions_throwing.1425370488.txt.gz · Last modified: 2016/02/26 11:15 (external edit)