====== try-with-resources Block ======
Ας επανέλθουμε στον αρχικό κώδικα που χρησιμοποιήσαμε για να διαβάσουμε ένα αρχείο. Εδώ θα παρουσιάσουμε μία παραλλαγή του κώδικα που παρουσιάστηκε νωρίτερα με χρήση ενός ιδιαίτερου **try** block.
import java.io.*;
import java.lang.*;
public class WholeFileReader {
  
  public String readFile(String path) {
    try ( FileReader fReader = new FileReader(new File (path)) ) {      
      BufferedReader in = new BufferedReader(fReader);
      String inputLine;
      StringBuffer strDocument = new StringBuffer();
      while ((inputLine = in.readLine()) != null) {
        strDocument.append(inputLine);
        //throw new IOException();
      }
      return strDocument.toString();
    }
    catch(IOException ex) {
      System.out.println("IOException occured while reading from file "+path);
    }
    
    return "";
  }
  
  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 from command line!\n");
    }
  }
}
Από τον παραπάνω κώδικα ξεχωρίζει η δήλωση της μορφής 
    try ( FileReader fReader = new FileReader(new File (path)) ) { 
    }
όπου ανοίγουμε ένα resource πριν εισέλθουμε στο σώμα του **try** block. Σε αυτό το τμήμα κώδικα η ιδιαιτερότητα είναι ότι δεν χρειάζεται να ανησυχούμε για το αν θα κλείσει σωστά το FileReader object ή όχι. Ανεξάρτητα από το αν θα δημιουργηθεί Exception ή όχι, το **JVM** θα αναλάβει να κλείσει το FileReader object αν αυτό παραμένει ανοιχτό. Απαραίτητη προϋπόθεση για να συμβεί το παραπάνω είναι η κλάση του αντικειμένου που θα δημιουργηθεί να υποστηρίζει το interface [[http://docs.oracle.com/javase/7/docs/api/java/lang/AutoCloseable.html|java.lang.Autoclosable]] ή ένα από τα sub-interfaces αυτού (π.χ. [[http://docs.oracle.com/javase/7/docs/api/java/io/Closeable.html|java.io.Closable]]).
Στην ίδια λογική μπορούμε να έχουμε περισσότερες από μία δηλώσεις κώδικα μέσα στην παρένθεση του try block όπως παρακάτω
try (
        java.util.zip.ZipFile zf =
             new java.util.zip.ZipFile(zipFileName);
        java.io.BufferedWriter writer = 
            java.nio.file.Files.newBufferedWriter(outputFilePath, charset)
    ) {
|Προηγούμενο: [[:java:exceptions_throwing | Δημιουργία και πυροδότηση εξαιρέσεων]] | [[ :toc | Περιεχόμενα ]] |  Επόμενο: [[:java:exception_categories | Κατηγορίες Εξαιρέσεων ]]|