ReadFile.java
001 package gate.creole.morph;
002 
003 import gate.util.BomStrippingInputStreamReader;
004 
005 import java.io.BufferedReader;
006 import java.io.FileNotFoundException;
007 import java.io.IOException;
008 import java.net.URL;
009 import java.util.ArrayList;
010 import java.util.List;
011 
012 /**
013  <p>Title: ReadFile.java </p>
014  <p>Description: This class provides methods to read the file (provided by the
015  * user) and to have the read access to each and every line separately </p>
016  */
017 public class ReadFile {
018 
019   /** Instance of BufferedReader used to read the files with UTF-8 encoding */
020   private BufferedReader br;
021 
022   /** Pointer which keeps track of what line is accessible to the user */
023   private int pointer = 0;
024 
025   /** Stores each line of the file as a separate String in the ArrayList */
026   private List<String> data;
027 
028   /**
029    * Constructor - Initialise the buffered Reader instance
030    @param fileURL URL of the file to be read
031    */
032   public ReadFile(URL fileURL) {
033 
034     data = new ArrayList<String>();
035 
036     try {
037       br = new BomStrippingInputStreamReader(fileURL.openStream(),
038               "UTF-8");
039     catch(FileNotFoundException e) {
040       e.printStackTrace();
041     catch(IOException e) {
042       e.printStackTrace();
043     }
044   }
045 
046   /**
047    * Reads the file and stores each line as a separate element in the ArrayList
048    @return true if read operation is successful, false otherwise
049    */
050   public boolean read() {
051     String text;
052     try {
053       text = br.readLine();
054       while(text!=null) {
055         data.add(text);
056         text = br.readLine();
057       }
058       text = null;
059       // file has been read, close it
060       br.close();
061       // now set the pointer to 0
062       pointer = 0;
063 
064     catch(IOException ie) {
065       ie.printStackTrace();
066       return false;
067     }
068     return true;
069   }
070 
071   /**
072    * This method tells if next line is available to read
073    @return true if line is available, false otherwise
074    */
075   public boolean hasNext() {
076     if(data.size()>pointer) {
077       return true;
078     else {
079       return false;
080     }
081   }
082 
083 
084   /**
085    * This method gives the next available String (line from the file)
086    @return line if available, null otherwise
087    */
088   public String getNext() {
089     if(data.size()>pointer) {
090       String value = data.get(pointer);
091       pointer++;
092       return value;
093     else {
094       return null;
095     }
096   }
097 
098   /**
099    * Tells the position of the pointer in the file
100    @return line number where the pointer is located in the file
101    */
102   public int getPointer() {
103     return pointer;
104   }
105 
106 }