[LinkedIn] Text File Iterable
Implement a (Java) Iterable object that iterates lines one by one from a text file..
/** A reference to a file. */
public class TextFile implements Iterable<String>. From 1point 3acres bbs
{
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
ANSWER: An implementation of this using bufferedReader:
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();
}
};
}
}
//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();
}
};
}
}