Hmmz, okeej, ffies wat code:
code:
1
| private File storageFile = new File("HitCounter.dat"); |
Dit is een instance variable in m'n Servlet.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| Data hits = (Data) this.getServletContext().getAttribute("hits");
// Als er nog geen data structuur aanwezig is
if (hits == null)
{
// Als het bestand bestaat
if (storageFile.exists())
{
// Maak de datastructuur aan op basis van het gevonden bestand en sla deze op op applicatie niveau
hits = new Data(storageFile);
this.getServletContext().setAttribute("hits", hits);
}
else // Als er nog geen data bestand is voor de data structuur
{
// Maak een lege datastructuur aan en sla deze op op applicatie niveau
hits = new Data();
this.getServletContext().setAttribute("hits", hits);
}
} |
Hier kijk ik eerst of er op applicatie niveau al een variable is voor 't opslaan van data. Zo niet, dan wordt gecontroleerd of er een bestand bestaat waarin de data is opgeslagen. Zo ja, dan wordt 't object van die data gemaakt, zo niet, dan wordt een leeg object gemaakt.
Hier sla ik de data op (methode volgt zo). Dit gebeurt na elke registratie van een hit.
code:
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
| public Data(File storageFile) throws IOException
{
// Open the file
BufferedReader reader = new BufferedReader(new FileReader(storageFile));
// Read the header
StringTokenizer tokenizer = new StringTokenizer(reader.readLine(), "|");
// Get the total amount of hits, browsers, language codes, IP addresses and days from the read line
totalHits = Integer.parseInt(tokenizer.nextToken());
int browsers = Integer.parseInt(tokenizer.nextToken());
int languages = Integer.parseInt(tokenizer.nextToken());
int ipaddresses = Integer.parseInt(tokenizer.nextToken());
int days = Integer.parseInt(tokenizer.nextToken());
// Read the browser types and their hits from the file
for (int a = 0; a < browsers; a++)
{
tokenizer = new StringTokenizer(reader.readLine(), "|");
hitsPerBrowser.put(tokenizer.nextToken(), Integer.decode(tokenizer.nextToken()));
}
// Read the language codes and their hits from the file
for (int a = 0; a < languages; a++)
{
tokenizer = new StringTokenizer(reader.readLine(), "|");
hitsPerLanguage.put(tokenizer.nextToken(), Integer.decode(tokenizer.nextToken()));
}
// Read the IP addresses and their hits from the file
for (int a = 0; a < ipaddresses; a++)
{
tokenizer = new StringTokenizer(reader.readLine(), "|");
hitsPerIP.put(tokenizer.nextToken(), Integer.decode(tokenizer.nextToken()));
}
// Read the unique hits per day from the file
for (int a = 0; a < days; a++)
{
tokenizer = new StringTokenizer(reader.readLine(), "|");
uniqueHitsPerDay.put(tokenizer.nextToken(), Integer.decode(tokenizer.nextToken()));
}
// Close the file
reader.close();
} |
Dit is de code om 't Data object te maken vanuit data op de schijf.
code:
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
| public boolean Save(File storageFile) {
try {
// Create a FileWriter for the file, so we can write data to it
FileOutputStream fs = new FileOutputStream(storageFile, false);
PrintStream writer = new PrintStream(fs);
// Write a header to the file
writer.println(totalHits + "|" + hitsPerBrowser.keySet().size() + "|" + hitsPerLanguage.keySet().size() + "|" +
hitsPerIP.keySet().size() + "|" + uniqueHitsPerDay.keySet().size() + "\r\n");
// Write the browser types and hits to the file
Iterator i = hitsPerBrowser.entrySet().iterator();
while (i.hasNext()) {
Map.Entry entry = (Map.Entry) i.next();
writer.println(entry.getKey() + "|" + entry.getValue() + "\r\n");
}
// Write the language codes and hits to the file
i = hitsPerLanguage.entrySet().iterator();
while (i.hasNext()) {
Map.Entry entry = (Map.Entry) i.next();
writer.println(entry.getKey() + "|" + entry.getValue() + "\r\n");
}
// Write the IP addresses and hits to the file
i = hitsPerIP.entrySet().iterator();
while (i.hasNext()) {
Map.Entry entry = (Map.Entry) i.next();
writer.println(entry.getKey() + "|" + entry.getValue() + "\r\n");
}
// Write the unique hits per day to the file
i = uniqueHitsPerDay.entrySet().iterator();
while (i.hasNext()) {
Map.Entry entry = (Map.Entry) i.next();
writer.println(entry.getKey() + "|" + entry.getValue() + "\r\n");
}
// Close the file
writer.close();
// Return true
return true;
}
catch (IOException ex) {
return false;
}
} |
En tot slot de code voor het schrijven van het bestand.