Паттерн: Итератор (Iterator)
Исходник: FileLineListOpt.java, язык: java [code #504, hits: 6182]
автор: this [добавлен: 05.10.2007]
  1. package iterator;
  2.  
  3. import java.io.FileNotFoundException;
  4. import java.io.IOException;
  5. import java.util.Iterator;
  6.  
  7. public class FileLineListOpt extends FileLineList {
  8.  
  9. private class FileLineIterator implements Iterator<String> {
  10. private String line;
  11. public FileLineIterator() {
  12. try {
  13. /* Метод класса FileLineListOpt,
  14. * унаследованный от FileLineList */
  15. Init();
  16. } catch (IOException e) {
  17. WriteReadingError();
  18. }
  19. }
  20.  
  21. public boolean hasNext() {
  22. try {
  23. if (line == null) {
  24. line = reader.readLine();
  25. }
  26. /* Если строк не осталось, то тут же
  27. * и закрываем файл
  28. */
  29. if (line == null) reader.close();
  30. return line != null;
  31. } catch (IOException e) {
  32. WriteReadingError();
  33. }
  34. return false;
  35. }
  36.  
  37. public String next() {
  38. String ret = null;
  39. if (hasNext()) {
  40. ret = line;
  41. line = null;
  42. }
  43. return ret;
  44. }
  45.  
  46. public void remove() {
  47. throw new UnsupportedOperationException("Невозможно удалять элементы из FileLineListOpt");
  48. }
  49.  
  50. }
  51.  
  52. public FileLineListOpt(String filePath) throws FileNotFoundException {
  53. super(filePath);
  54. }
  55.  
  56. public Iterator<String> iterator() {
  57. return new FileLineIterator();
  58. }
  59.  
  60. }
Сущность Concretelterator

Улучшенная версия итератора построчного обращения к файлу: использование собственного внутреннего итератора.
Тестировалось на: java 1.5.0_04

+добавить реализацию