java:console_read

Differences

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

Link to this comparison view

java:console_read [2015/06/20 02:38]
gthanos [Διαβάζοντας με χρήση της κλάσης Console]
java:console_read [2016/02/26 11:15]
Line 1: Line 1:
-====== Διαβάζοντας από την κονσόλα ====== 
- 
-Προκειμένου να διαβάσετε από την κονσόλα έχετε δύο επιλογές 
-  - να διαβάσετε με χρήση του standard stream **System.in**. Τα standard streams ορίζονται από το λειτουργικό σύστημα και είναι τα εξής: **System.in**,​ **System.err**,​ **System.out** (σε αναλογία με τα STDIN, STDERR, STDOUT στη γλώσσα **C**). 
-  - Με χρήση της κλάσης **[[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​io/​Console.html|java.io.Console]]**. 
- 
-===== Διαβάζοντας από το System.in ===== 
- 
-To **System.in** είναι ένα stream τύπου byte-stream. Συνήθως από την κονσόλα θέλουμε να διαβάσουμε χαρακτήρες. Στις περιπτώσεις αυτές απαιτείται να το μετατρέψουμε σε character stream ως εξής: 
- 
-<code java> 
-InputStreamReader cin = new InputStreamReader(System.in);​ 
-</​code>​ 
- 
-Τον παραπάνω κώδικα συνήθως τον εντάσσουμε μέσα σε ένα block try/catch, όπως παρακάτω 
- 
-<code java> 
-  try (InputStreamReader r = new InputStreamReader(System.in)) { 
-     char []buf = new char[128]; 
-     ​String word = null; 
-     int len = 0; 
-     ​System.out.print("​Enter your input: "); 
-     ​if((len = r.read(buf,​0,​128)) != -1) { 
-       word = new String(buf);​ 
-       word = word.substring(0,​ len-1); 
-       ​System.out.println("​Your input is: "​+word);​ 
-     } 
-     else { 
-       ​System.out.println("​No input!"​);​ 
-     } 
-  } catch (IOException ex) { 
-    System.out.println("​Unable to read from STDIN"​);​ 
-    System.exit(1);​ 
-  }      ​ 
-</​code>​ 
- 
-Για την διευκόλυνση σας, κατά την ανάγνωση μπορείτε να δημιουργήσετε ένα αντικείμενο της κλάσης java.io.BufferedReader,​ όπως παρακάτω. Το πλεονέκτημα της συγκεκριμένης επιλογής είναι ότι η κλάση BufferedReader σας δίνει την δυνατότητα να διαβάσετε απευθείας μία γραμμή από το stream μέσω της μεθόδου readLine, την οποία επιστρέφει ως String. 
- 
-<code java> 
-  try (BufferedReader r = new BufferedReader(new InputStreamReader(System.in)) ) { 
-    String word = null; 
-    System.out.print("​Enter your input: "); 
-    if( (word=r.readLine()) != null) { 
-      System.out.println("​Your input is: "​+word);​ 
-    } 
-    else { 
-      System.out.println("​No input!"​);​ 
-    } 
-  }catch (IOException ex) { 
-    System.out.println("​Unable to read from STDIN"​);​ 
-    System.exit(1);​ 
-  }      ​ 
-</​code>​ 
- 
-<WRAP info 80% center round> 
-Σε όλες τις περιπτώσεις που ανοίγετε ένα stream υποχρεούστε να ελέγχετε για πιθανή δημιουργία IOException κατά το άνοιγμα του stream. Ο compiler της Java θα εμφανίσει λάθος σε περίπτωση που δεν το κάνετε. 
-</​WRAP>​ 
- 
-===== Διαβάζοντας με χρήση της κλάσης Console ===== 
- 
-Μπορείτε να διαβάσετε ή να γράψετε στην κονσόλα με την βοήθεια της κλάσης [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​io/​Console.html|java.io.Console]]. Το παρακάτω παράδειγμα είναι από το site της Oracle και δείχνει την χρήση της κλάσης μέσω των μεθόδων **readLine** και **readPassword**. 
- 
-<code java Password.java>​ 
-import java.io.Console;​ 
-import java.util.Arrays;​ 
-import java.io.IOException;​ 
- 
-public class Password { 
-  ​ 
-  public static void main (String args[]) throws IOException { 
- 
-    Console c = System.console();​ 
-    if (c == null) { 
-      System.err.println("​No console."​);​ 
-      System.exit(1);​ 
-    } 
- 
-    String login = c.readLine("​Enter your login: "); 
-    char [] oldPassword = c.readPassword("​Enter your old password: "); 
- 
-    if (verify(login,​ oldPassword)) { 
-      boolean noMatch; 
-      do { 
-        char [] newPassword1 = c.readPassword("​Enter your new password: "); 
-        char [] newPassword2 = c.readPassword("​Enter new password again: "); 
-        noMatch = ! Arrays.equals(newPassword1,​ newPassword2);​ 
-        if (noMatch) { 
-          c.format("​Passwords don't match. Try again.%n"​);​ 
-        } else { 
-          change(login,​ newPassword1);​ 
-          c.format("​Password for %s changed.%n",​ login); 
-        } 
-        Arrays.fill(newPassword1,​ ' '); 
-        Arrays.fill(newPassword2,​ ' '); 
-      } while (noMatch); 
-    } 
- 
-    Arrays.fill(oldPassword,​ ' '); 
-  } 
-  ​ 
-  // Dummy change method. 
-  static boolean verify(String login, char[] password) { 
-    // This method always returns 
-    // true in this example. 
-    // Modify this method to verify 
-    // password according to your rules. 
-    return true; 
-  } 
- 
-  // Dummy change method. 
-  static void change(String login, char[] password) { 
-    // Modify this method to change 
-    // password according to your rules. 
-  } 
-} 
-</​code>​ 
- 
- 
- 
- 
  
java/console_read.txt · Last modified: 2016/02/26 11:15 (external edit)