vag_pRiMi Δημοσ. 14 Μαΐου 2009 Δημοσ. 14 Μαΐου 2009 Φτιάχνεις stream που θα διαβάσει από αρχείο. Καλύτερα να κάνεις exception αν πας να διαβάσεις και δε βρεθεί το αρχείο, ή να κάνεις τυπικό έλεγχο για την ύπαρξή του; Άλλο ένα πολύ καλό παράδειγμα για το πώς σε καθοδηγεί η γλώσσα: Ας υποθέσουμε ότι δεν θέλαμε να κάνουμε υλοποίηση με try/catch. Για να υλοποιήσουμε τους ελέγχους, θα είχαμε: > public class Examples { public static void main(String[] args) { java.io.File aFile = new java.io.File("D:\\mywork\\input"); if (aFile.exists() && !aFile.isDirectory()) { java.io.FileInputStream fis = new java.io.FileInputStream(aFile); } else if (!aFile.exists()) { System.err.println("File not found"); } else if (aFile.isDirectory()) { System.err.println("File is a directory. Cannot read anything from a directory"); } else { System.err.println("Unknown file error"); } } } Στους constructors του FileInputStream βλέπουμε ότι: Throws: FileNotFoundException - if the file does not exist, is a directory rather than a regular file, or for some other reason cannot be opened for reading. Άρα ο ίδιος ο compiler της Java μας υποχρεώνει να χρησιμοποιήσουμε exceptions. Ο παραπάνω κώδικας διορθώνεται ως εξής: > [b]try { [/b] java.io.FileInputStream fis = new java.io.FileInputStream(aFile); [b]} catch (FileNotFoundException e) {[/b] // TODO Auto-generated catch block System.err.println("Error reading file"); e.printStackTrace(); [b]}[/b] Τελικά, αφού πρέπει να χρησιμοποιήσουμε exceptions, μπορούμε να πετάξουμε και τα δικά μας if/else. Έτσι όμως η πληροφορία λάθους που είναι διαθέσιμη για feedback προς το χρήστη, θα είναι περιορισμένη. Εδώ όμως, μπορούμε να τα έχουμε όλα έτσι: > public class Examples { public static void main(String[] args) { java.io.File aFile = new java.io.File("D:\\mywork\\input"); try { java.io.FileInputStream fis = new java.io.FileInputStream(aFile); } catch (FileNotFoundException e) { // TODO Auto-generated catch block System.err.println("Error reading file"); if (aFile.exists() && !aFile.isDirectory()) { /* You should never see this as under these conditions the file should be read */ } else if (!aFile.exists()) { System.err.println("File not found"); } else if (aFile.isDirectory()) { System.err.println("File is a directory. Cannot read anything from a directory"); } else { System.err.println("Unknown file error"); } e.printStackTrace(); } } } Αν δεν ήταν δουλειά της main να χειριστεί το exception (ήταν πχ του GUI) αλλά μόνο να διαβάσει το αρχείο, τότε τα πράγματα θα ήταν πολύ πιο απλά: > public static void main(String[] args) [b]throws java.io.FileNotFoundException[/b] { java.io.File aFile = new java.io.File("D:\\mywork\\input"); java.io.FileInputStream fis = new java.io.FileInputStream(aFile); } ...και οι έλεγχοι (if/else) και το feedback (messages/dialog popups) θα βρισκόταν στο class του GUI.
Wise_One Δημοσ. 14 Μαΐου 2009 Δημοσ. 14 Μαΐου 2009 Κατατοπιστικότατος. Φίλε πολύ καλή εξήγηση. Το API ανα χείρας (ανα tab καλύτερα) και βλέπουμε σε κάθε περίπτωση. Φοβερός. Κρατάω το post για reference. Να 'σαι καλά
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.