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

        };
        }
}

From Here

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

}
posted on 2015-03-31 13:50  Seth_L  阅读(608)  评论(0编辑  收藏  举报