I thought of making a class that could easily iterate over each of the line one by one..
This class PipedString represents a string which has elements seperated by a | symbol.
This is an iterable class
Create a class PipedString as follows
package flatfilereader;
import java.util.Iterator;
public class PipedString implements Iterable<String> {
private String line;
private int index = 0;
@Override
public String toString()
{
return line;
}
public PipedString(String x) {
this.line = x;
}
@Override
public Iterator<String> iterator() {
return new Iterator<String>()
{
private String _currentElement;
String[] symbols=null;
@Override
public boolean hasNext() {
try {
if(symbols==null)
{
symbols = line.split("\\|");
}
_currentElement = symbols[index];
} catch (Exception ex) {
line = null;
}
return (index < symbols.length);
}
@Override
public String next() {
index++;
return _currentElement;
}
@Override
public void remove() {
}
};
}
}
Now create a Flat File Reader using this PipedString
package flatfilereader;
import java.util.*;
import java.io.*;
public class FlatFileReader implements Iterable<PipedString>
{
private BufferedReader _reader;
public FlatFileReader(String filePath) throws Exception
{
_reader = new BufferedReader(new FileReader(filePath));
}
public void Close()
{
try
{
_reader.close();
}
catch (Exception ex) {}
}
public Iterator<PipedString> iterator()
{
return new PipedStringIterator();
}
private class PipedStringIterator implements Iterator<PipedString>
{
private PipedString _currentLine;
public boolean hasNext()
{
try
{
String cl = _reader.readLine();
if(cl==null) return false;
_currentLine = new PipedString(cl);
}
catch (Exception ex)
{
_currentLine = null;
}
return _currentLine != null;
}
@Override
public PipedString next()
{
return _currentLine;
}
public void remove()
{
}
}
}
How to use this FlatFileReader class
public static void main(String[] s) throws Exception
{
FlatFileReader f= new FlatFileReader("D:/test/x.txt");
for(PipedString pps : f)
{
for(String eachElement : pps)
{
System.out.println(eachElement);
}
}
f.Close();
}
No comments:
Post a Comment