-
Notifications
You must be signed in to change notification settings - Fork 0
/
DatabaseIterator.java
90 lines (66 loc) · 2.08 KB
/
DatabaseIterator.java
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
/*
* DatabaseIterator.java
*
* Given a path to the directory containing articles,
* an instance of this class can iterate through the files,
* giving a client a reference to a new Article object
* corresponding to the file.
*
* Author: Alexander Breen ([email protected])
* Completed by:
* Date: March 21, 2014
*/
import java.util.*;
import java.io.*;
public class DatabaseIterator implements Iterator<Article> {
private String directoryPath;
private File[] children;
private int next;
public DatabaseIterator(String path) {
this.directoryPath = path;
this.next = 0;
this.children = findChildren(path);
}
public boolean hasNext() {
return next < children.length - 1;
}
public Article next() {
File thisFile = children[next];
Scanner s = null;
try {
s = new Scanner(thisFile, "UTF-8");
} catch (FileNotFoundException e) {
throw new RuntimeException("child does not exist -- " +
"was it deleted?");
}
String title = s.nextLine();
String body = "";
while (s.hasNextLine())
body += s.nextLine() + "\n";
Article a = new Article(title, body);
next++;
return a;
}
public void remove() {
throw new UnsupportedOperationException();
}
public void reset() {
next = 0;
}
public int getNumArticles() {
return children.length;
}
private File[] findChildren(String path) throws IllegalArgumentException {
File dir = new File(path);
if (!dir.exists())
throw new IllegalArgumentException("directory does not exist");
if (!dir.isDirectory())
throw new IllegalArgumentException("path does not refer to " +
"a directory");
File[] cs = dir.listFiles();
if (cs == null)
throw new RuntimeException("an error occured getting files " +
"under directory");
return cs;
}
}