This shows you the differences between two versions of the page.
|
java:exceptions_try_with_resources [2015/03/10 14:14] gthanos |
java:exceptions_try_with_resources [2021/03/22 21:44] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== 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(); | ||
| - | } | ||
| - | fReader.close(); | ||
| - | return strDocument.toString(); | ||
| - | } | ||
| - | catch(IOException ex) { | ||
| - | System.out.println(" | ||
| - | } | ||
| - | | ||
| - | 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(" | ||
| - | } | ||
| - | } | ||
| - | |||
| - | } | ||
| - | </ | ||
| - | |||
| - | Από τον παραπάνω κώδικα ξεχωρίζει η δήλωση της μορφής | ||
| - | <code java> | ||
| - | try ( FileReader fReader = new FileReader(new File (path)) ) { | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | όπου ανοίγουμε ένα resource πριν εισέλθουμε στο σώμα του **try** block. Σε αυτό το τμήμα κώδικα η ιδιαιτερότητα είναι ότι δεν χρειάζεται να ανησυχούμε για το αν θα κλείσω σωστά το FileReader object ή όχι. Ανεξάρτητα από το αν θα δημιουργηθεί Exception ή όχι, το **JVM** θα αναλάβει να κλείσει το FileReader object αν αυτό παραμένει ανοιχτό. Απαραίτητη προϋπόθεση για να συμβεί το παραπάνω είναι η κλάση του αντικειμένου που θα δημιουργηθεί να υποστηρίζει το interface [[http:// | ||
| - | |||
| - | Στην ίδια λογική μπορούμε να έχουμε περισσότερες από μία δηλώσεις κώδικα μέσα στην παρένθεση του 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, | ||
| - | ) { | ||
| - | </ | ||
| - | |||
| - | |Προηγούμενο: | ||