java:exceptions_try_with_resources

This is an old revision of the document!


A PCRE internal error occured. This might be caused by a faulty plugin

====== try-with-resources Block ====== Ας επανέλθουμε στον αρχικό κώδικα που χρησιμοποιήσαμε για να διαβάσουμε ένα αρχείο. Εδώ θα παρουσιάσουμε μία παραλλαγή του κώδικα που παρουσιάστηκε νωρίτερα με χρήση ενός ιδιαίτερου **try** block. <code java WholeFileReader.java> 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"); } } } </code> Από τον παραπάνω κώδικα ξεχωρίζει η δήλωση της μορφής <code java> try ( FileReader fReader = new FileReader(new File (path)) ) { } </code> όπου ανοίγουμε ένα 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 όπως παρακάτω <code java> try ( java.util.zip.ZipFile zf = new java.util.zip.ZipFile(zipFileName); java.io.BufferedWriter writer = java.nio.file.Files.newBufferedWriter(outputFilePath, charset) ) { </code> |Προηγούμενο: [[:java:exceptions_throwing | Δημιουργία και πυροδότηση εξαιρέσεων]] | Επόμενο: [[:java:exception_categories | Κατηγορίες Εξαιρέσεων ]]|

java/exceptions_try_with_resources.1456485334.txt.gz · Last modified: 2017/02/16 15:09 (external edit)