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();
     }
   };
 }

}