在python中读取文件可以很简单的使用
for line in myfile.readlines():
print line
而在jdk1.5中,只要我们的类实现了Iterable接口的,即也可以使用如下语句, for(Object o : iterable);
Iterable的接口声明如下.
public interface Iterable<T> {
/**
* Returns an iterator over a set of elements of type T.
*
* @return an Iterator.
*/
Iterator<T> iterator();
}
也即返回一个迭代器Iterator接口即可. 所以我们现在来改造我们的Reader,实现如下:
public class IterableReader extends BufferedReader implements Iterable<String>{
public IterableReader(Reader in) {
super(in);
}
public Iterator<String> iterator() {
return new IteratorReader();
}
class IteratorReader implements Iterator{
String line = null;
public boolean hasNext() {
try {
line = readLine();
} catch (IOException e) {
return false;
}
if(line == null) {
return false;
}
return true;
}
public Object next() {
return line;
}
public void remove() {
throw new UnsupportedOperationException();
}
}
}
现在我们的reader即可如下使用
StringReader r = new StringReader(" 111 \n 222 \n 333");
IterableReader reader = new IterableReader(r);
for(String str : reader) {
System.out.println(str);
}
是否感觉简洁了许多呢? :)