Tutorium Java I, Sitzung 12, 02.02.2009 Ein einfaches Beispiel für das Auslesen von der Konsole: import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.util.Scanner; public class IoSimple{ public static void main(String[] args) throws IOException{ System.out.println("Konsole : "); int r; Reader inputStreamReader = new InputStreamReader(System.in); while ((r = inputStreamReader.read()) != -1) { System.out.println((char) r); } //dieselbe Funtion kann auch z.B. ein Scanner übernehmen: Scanner scanner = new Scanner(System.in); String line; while ((line = scanner.nextLine()) != null) { System.out.println(line); } System.out.println("(N)eu erstellen oder Datei (Ö)ffnen"); } } Im folgenden einige Beispiele wie Reader verwendet werden können: import import import import import import import java.io.BufferedReader; java.io.File; java.io.FileNotFoundException; java.io.IOException; java.io.InputStreamReader; java.io.Reader; java.util.Scanner; public class DivReaderWriter { public void byteStream() throws IOException { int r; while ((r = System.in.read()) != -1) { System.out.println((char) r); } } public void reader() throws IOException { int r; Reader inputStreamReader = new InputStreamReader(System.in); while ((r = inputStreamReader.read()) != -1) { System.out.println((char) r); } } public void scanner() { // Die Klasse Scanner bietet seit Java 5 eine komfortable Variante, // etwas aus Readern, InputStreams, Strings oder Files einzulesen: Scanner scanner = new Scanner(System.in); String line; while ((line = scanner.nextLine()) != null) { System.out.println(line); } // im Scanner gibts weitere nuetzliche Sachen, etwa Zahlen auslesen: Integer number = scanner.nextInt(); // oder um zu pruefen, was drin ist: Boolean hasDouble = scanner.hasNextDouble(); // und bietet auch Unterstuetzung fuer regulaere Ausdruecke: Boolean hasLetters = scanner.hasNext("[a-zA-Z]+"); } public void encoding() throws FileNotFoundException { // Einem Scanner kann man (wie auch Readern) das Encoding einer Datei // angeben, das beim Einlesen verwendet werden soll: Scanner scanner = new Scanner(new File("temp.txt"), "utf-8"); // Benutzung wie oben… } public void lineReader() throws IOException { // Wenn wir zeilenweise einlesen, verwenden wir einen // BufferedReader, der mit jedem Reader-Objekt erzeugt werden kann BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); String line; while ((line = bufferedReader.readLine()) != null) { System.out.println(line); } } } Ein weiteres Beispiel für Reader und Writer. Aufgrund der gewählten Option wird entweder eine Datei gelesen oder neu erzeugt. Der FileWriter erstellt hier nur eine neue Datei, schreibt aber keinen Inhalt. import import import import import import import import java.io.BufferedReader; java.io.File; java.io.FileNotFoundException; java.io.FileWriter; java.io.IOException; java.io.InputStreamReader; java.io.PrintWriter; java.util.Scanner; public class Io { public static void main(String[] args) throws IOException{ System.out.println("(N)eu erstellen oder Datei (Ö)ffnen"); Scanner scanner = new Scanner(System.in); String zeile = scanner.nextLine(); File newFile = new File("temp.txt"); File textFile = new File("text.txt"); if (zeile.equalsIgnoreCase("N")) { try { FileWriter writer = new FileWriter(newFile); //ein FileWriter muss geschlossen werden writer.close(); System.out.println("existiert newFile ? "+newFile); } catch (IOException e) { e.printStackTrace(); } } else if (zeile.equalsIgnoreCase("Ö")) { System.out.println("Wird gemacht..."); System.out.println(); scanner = new Scanner(textFile); while (scanner.hasNextLine()) { String line = scanner.nextLine(); System.out.println(line); } } else { System.out.println("Falsche Eingabe: " + zeile); } } }