User Tools

Site Tools


java:console_read

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Previous revision
java:console_read [2015/06/20 01:40]
java:console_read [2015/06/20 02:40]
gthanos [Διαβάζοντας με χρήση της κλάσης Console]
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>
 +
 +===== Διαβάζοντας με χρήση της κλάσης java.io.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: 2015/06/20 01:40 (external edit)