Text File Iterable
Problem
/** A reference to a file. */
public class TextFile implements Iterable<String>
{
public TextFile(String fileName) { // please implement this
/** Begin reading the file, line by line. The returned Iterator.next() will return a line. */
@Override
public Iterator<String> iterator() { // please implement this
Solution 1 with BufferReader
public class TextFile implements Iterable<String>{
private BufferedReader br;
public TextFile(String fileName) throws FileNotFoundException {
br = new BufferedReader(new FileReader(fileName));
}
@Override
public Iterator<String> iterator() {
return new Iterator<String>() {
@Override
public boolean hasNext() {
try {
br.mark(1);
if (br.read() < 0) {
return false;
}
br.reset();
return true;
} catch (IOException e) {
return false;
}
}
@Override
public String next() {
try {
return br.readLine();
} catch (IOException e) {
return null;
}
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
}
}
Solution 2 with Scanner
//Another implementation using scanner
public class TextFile implements Iterable<String> {
public TextFile(String fileName) { // please implement this }
// Begin reading the file, line by line. The returned Iterator.next() will
// return a line.
@Override
public Iterator<String> iterator() { // please implement this }
}
public class TextFile implements Iterable<String> {
Scanner scanner;
public TextFile(String fileName) {
try {
scanner = new Scanner(new File(fileName));
} catch(Exception e) { }
}
@Override
public Iterator<String> iterator() {
return new Iterator<String>() {
@Override
public boolean hasNext() {
return scanner.hasNext();
}
@Override
public String next() {
if (hasNext()) {
return scanner.nextLine();
} else {
return null;
}
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
}
}