Eingabe und Ausgabe in Java Dr. Horst Treiblmaier Abteilung für Wirtschaftsinformatik WU Wien Eingabe Beispiel1 public class Input1 { public static void main(String[] args) { for (int i = 0; i < args.length; i++) { System.out.println(args[i]); } } } Eingabe mit Parameter Übung Erstellen Sie eine Klasse Multiplikator die eine beliebige Anzahl von Eingabewerten (ganzzahlig) miteinander multipliziert und das Ergebnis ausgibt. Hinweis: Verwenden Sie die Methode parseInt() der Klasse Integer um den Datentyp String in den Datentyp int umzuwandeln. Lösung public class Multiplikator { public static void main (String[] args) { int ergebnis = 1; for (int i = 0; i < args.length; i++) { ergebnis = ergebnis * Integer.parseInt(args[i]); } System.out.println("Ergebnis: " + ergebnis); } } Hinweis Nähere Informations zu Streams bzw. Readern und Writern finden Sie im Skriptum zur Java VO. Zusätzlich ist es sinnvoll die Inhalte in einem der empfohlenen Bücher nachzulesen. Streams n n Streams stellen den Datenfluss zwischen Sender und Empfänger dar. Mit Streams kann gelesen oder geschrieben werden. Input Stream n Es gibt zwei Klassen von Inputstreams: n n Klassen die angeben von WO gelesen werden soll (z.B. FileInputStream) Klassen die angeben WIE gelesen werden soll (z.B. BufferedInputStream) Output Stream n Es gibt zwei Klassen von Outputstreams: n n Klassen die angeben WOHIN geschrieben werden soll (z.B. FileOutputStream) Klassen die angeben WIE geschrieben werden soll (z.B. BufferedOutputStream) Eingabe und Ausgabe n n Für die Verwendung der Eingabe- und Ausgabeklassen muss das Paket java.io.* importiert werden. Dort finden Sie Input- und Outputstreams bzw. Reader und Writer. Ausgabe in eine Datei import java.io.*; public class AusgabeBeispiel1 { public static void main (String args[]) throws IOException{ int zahl = 40; File datei = new File ("Test.txt"); FileWriter ausgabestrom = new FileWriter(datei); PrintWriter ausgabe = new PrintWriter(ausgabestrom); ausgabe.print("Erste Zeile "); ausgabe.println("Zweite Zeile"); ausgabe.print("Eine Zahl: " + zahl); ausgabe.close(); } } Beispielanalyse 1) Der Konstruktor der Klasse File erzeugt eine neue Instanz mit dem Namen Test.txt. 2) Der Konstruktor der Klasse FileWriter benötigt eine Instanz der Klasse File. (hier: datei). 3) Die Klasse PrintWriter ermöglicht eine komfortable Ausgabe (hier mit print() und println() ). Eingabe import java.io.*; class Input1 { public static void main (String args[]) { try { System.out.println("Geben Sie eine Zeichenkette ein: "); BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in)); String eingabewert = eingabe.readLine(); System.out.println("Eingabe: " + eingabewert); } catch (IOException e) { } } } Beispielanalyse 1) Suchen Sie in der Java API die Methode readLine() der Klasse Buffered Reader. Warum benötigen wir einen try-catch block? Kennen Sie ein andere Möglichkeit um die Ausnahme zu behandeln? 2) System.in ist die Standardeingabe von der Tastatur 3) Die Klasse InputStreamReader liest Bytes und decodiert diese in einen bestimmten Zeichensatz. 4) Die Klasse BufferedReader buffert die eingelesenen Bytes. Aufgabe Mitarbeiter 1 Schreiben Sie eine Klasse Mitarbeiter, welche die Variablen name (String) und alter (int) besitzt. Zusätzlich verfügt diese Klasse über einen Konstruktor der Namen und Alter zuweist und 2 Methoden getName() und getAlter(), welche die jeweiligen Variablen zurückgeben. In einer Klasse Mitarbeiterverwaltung fragen Sie den Nutzer zunächst wieviele Mitarbeiter angelegt werden sollen. Danach lesen Sie in einer Schleife Namen und Alter des jeweiligen Mitarbeiters aus und weisen diese einer Instanz zu. Abschließend geben Sie alle Mitarbeiter inkl. deren Alter aus. Hinweis: Betrachten Sie den Screenshot auf der nächsten Folie Aufgabe Mitarbeiter 2 Lösung Mitarbeiter 1 class Mitarbeiter { String name; int alter; Mitarbeiter(String name, int alter) { this.name = name; this.alter = alter; } String getName() { return name; } int getAlter() { return alter; } } Lösung Mitarbeiter 2a import java.io.*; class Mitarbeiterverwaltung { public static void main(String[] args) throws IOException{ System.out.println("Wieviele Mitarbeiter wollen Sie anlegen?"); BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in)); String eingabewert = eingabe.readLine(); int zaehler = Integer.parseInt(eingabewert); //Anlegen neuer Mitarbeiter Mitarbeiter[] meineMitarbeiter = new Mitarbeiter[zaehler]; String name; int alter; Lösung Mitarbeiter 2b for (int i = 0; i<meineMitarbeiter.length; i++) { System.out.println("Name von Mitarbeiter Nr. " + (i+1)); eingabewert = eingabe.readLine(); name = eingabewert; System.out.println("Alter von Mitarbeiter Nr. " + (i+1)); eingabewert = eingabe.readLine(); alter = Integer.parseInt(eingabewert); meineMitarbeiter[i] = new Mitarbeiter(name, alter); } //Ausgabe aller Mitarbeiter for (int i = 0; i< meineMitarbeiter.length; i++) { System.out.println("*************"); System.out.println("Name von Mitarbeiter Nr. " + (i+1) + ": " + meineMitarbeiter[i].getName()); System.out.println("Alter von Mitarbeiter Nr. " + (i+1) + ": " + meineMitarbeiter[i].getAlter()); } } } Eingabe/Ausgabe in eine Datei import java.io.*; public class Kopierer { public static void main(String args[]) { int wert; try { FileInputStream eingabestrom = new FileInputStream("Original.txt"); FileOutputStream ausgabestrom = new FileOutputStream("Kopie.txt"); while ((wert = eingabestrom.read()) != -1) { ausgabestrom.write(wert); } ausgabestrom.flush(); ausgabestrom.close(); } catch (Exception e) { } } }