User Tools

Site Tools


java:exceptions_try_with_resources

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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("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.txt · Last modified: 2021/03/22 21:44 (external edit)