Die Java Utilities Scanner und Formatter sind zweifellos sehr komfortabel.
In dieser Übung lernt ihr
Streams kennen und könnt euch von deren Performance überzeugen.
|
Java Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
import java.io.*;
import java.util.*;
/**
* @author Torben Brodt
* @version 1.0
*
* <p />Performance Vergleich zwischen Streams und den Scanner/Formatter Utilities
* <p />Funktioniert ab Java 1.5
*/
public class A07_Randoms {
// Globale Variablen fuer Sprachdateien und zur Konfiguration
final static int max=100000;
final static String writeSuccess = "Es wurden "+max+" Zufallszahlen in %s geschrieben\n\n";
final static String middle = "Das arithmetische Mittel lautet: %d\n\n";
/**
* MAIN Funktion ruft das Abfragemenue auf
* @param args -> keine Parameter
* @throws IOException
*/
public static void main(String[] args) throws IOException {
menu(0);
}
/**
* Schnelles Verfahren zum Datei einlesen
* @param filename Dateiname
* @throws IOException
*/
static void readStream(String filename) throws IOException {
double mitte=0;
DataInputStream input = new DataInputStream(
new BufferedInputStream(
new FileInputStream(filename)));
for(int i=0; i<max; i++)
mitte += input.readDouble();
input.close();
System.out.printf(middle, mitte/max);
}
/**
* Schnelles Verfahren zum Datei auslesen
* @param filename Dateiname
* @throws IOException
*/
static void writeStream(String filename) throws IOException {
DataOutputStream output = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(filename)));
for(int i=0; i<max; i++)
output.writeInt((Math.random()*100));
output.close();
System.out.printf(writeSuccess, filename);
}
/**
* Einfaches Verfahren zum Datei schreiben
* @param filename Dateiname
* @throws FileNotFoundException
*/
static void writeFormatter(String filename) throws FileNotFoundException {
Formatter output = new Formatter(new File(filename));
for(int i=0; i<max; i++)
output.format((Math.random()*100) + "\n");
output.close();
System.out.printf(writeSuccess, filename);
}
/**
* Einfaches Verfahren zum Datei auslesen
* @param filename Dateiname
* @throws FileNotFoundException
*/
static void readScanner(String filename) throws FileNotFoundException {
double mitte=0;
Scanner input = new Scanner(new File(filename));
while(input.hasNextLine())
mitte += Integer.parseInt(input.nextLine());
input.close();
System.out.printf(middle, mitte/max);
}
/**
* Menue (kann sich auch selbst aufrufen)
* @param eingabe Tastatureingabe als Integer
* @throws IOException
*/
static void menu(int eingabe) throws IOException {
switch(eingabe) {
case 0: //Hauptmenue
menu(ask("Bitte waehlen Sie:\n" +
"1: Zahlen erzeugen und in Datei schreiben\n" +
"2: Zahlen aus Datei einlesen und arithmetische Mittel berechnen\n" +
"3: Programm beenden"));
break;
case 1: //1. Navigationsebene Schreibe
menu(ask("Bitte waehlen Sie:\n" +
"1: Mittels Formatter\n" +
"2: Mittels Streams")+10);
break;
case 2: //1. Navigationsebene Lese
menu(ask("Bitte waehlen Sie:\n" +
"1: Mittels Scanner\n" +
"2: Mittels Streams")+20);
break;
case 3: //1. Navigationsebene Beenden
System.out.println("Auf Wiedersehen");
System.exit(0);
break;
case 11: //Zahlen erzeugen und in Datei schreiben
writeFormatter(askFilename());
break;
case 12: //Zahlen erzeugen und in Datei schreiben
writeStream(askFilename());
break;
case 21: //Zahlen aus Datei einlesen und arithmetische Mittel berechnen
readScanner(askFilename());
break;
case 22: //Zahlen aus Datei einlesen und arithmetische Mittel berechnen
readStream(askFilename());
break;
default:
System.out.println("Fehler in der Eingabe. Bitte erneu versuchen.");
}
if(eingabe > 3)
menu(0);
}
/**
* Gibt eine Frage aus und liest einen Integerwert von Tastatur ein und liefert ihn zurueck
* @param question Die Frage
* @return Die Eingabe
*/
static int ask(String question) {
System.out.println(question);
java.util.Scanner input = new java.util.Scanner(System.in);
return input.nextInt();
}
/**
* Fragt nach dem Dateinamen und gibt diesen zurueck
* @return die Eingabe
*/
static String askFilename() {
System.out.println("Bitte geben Sie einen Dateinamen ein:");
java.util.Scanner input = new java.util.Scanner(System.in);
return input.next();
}
}
|
Programmablauf:
Bitte waehlen Sie:
1: Zahlen erzeugen und in Datei schreiben
2: Zahlen aus Datei einlesen und arithmetische Mittel berechnen
3: Programm beenden
1
Bitte waehlen Sie:
1: Mittels Formatter
2: Mittels Streams
2
Bitte geben Sie einen Dateinamen ein:
zahlen.dat
Es wurden 100000 Zufallszahlen in zahlen.dat geschrieben
Bitte waehlen Sie:
1: Zahlen erzeugen und in Datei schreiben
2: Zahlen aus Datei einlesen und arithmetische Mittel berechnen
3: Programm beenden
2
Bitte waehlen Sie:
1: Mittels Scanner
2: Mittels Streams
2
Bitte geben Sie einen Dateinamen ein:
zahlen.dat
Das arithmetische Mittel lautet: 49
Bitte waehlen Sie:
1: Zahlen erzeugen und in Datei schreiben
2: Zahlen aus Datei einlesen und arithmetische Mittel berechnen
3: Programm beenden
3
Auf Wiedersehen