import java.io.*; import java.util.Iterator; import java.util.Scanner; public class TekstitiedostonIteroija implements Iterator { public static final int VAKIO_RIVIMAARA = 20; private String seuraavaRivi; private File tiedosto; private int rivienlkm; private Scanner lukija; public TekstitiedostonIteroija(File tiedosto) throws java.io.FileNotFoundException { this.tiedosto = tiedosto; this.rivienlkm = VAKIO_RIVIMAARA; if (!tiedosto.exists()) throw new FileNotFoundException(); } public TekstitiedostonIteroija(File tiedosto, int rivienlkm) throws java.io.FileNotFoundException { this(tiedosto); if (rivienlkm == 0) rivienlkm = VAKIO_RIVIMAARA; this.rivienlkm = rivienlkm; this.lukija = new Scanner(tiedosto); } public String annaTiedostonNimi() { return this.tiedosto.getName(); } public boolean hasNext() { return lukija.hasNextLine(); } public Object next() { String paluu = ""; for (int i = 0; i < this.rivienlkm; i++) { if (this.hasNext()) paluu += lukija.nextLine() + "\n"; } return paluu; } public void remove() { } } -------------------- import java.io.*; import java.util.EmptyStackException; import java.util.Scanner; public class TekstitiedostonLukija { public static void main(String[] args) throws FileNotFoundException { int rivit = TekstitiedostonIteroija.VAKIO_RIVIMAARA; Scanner nappis = new Scanner(System.in); if (args.length != 2) { System.out.println("Anna vain kaksi parametria!"); System.out.println("1. Parametri kertoo luettavan tiedoston."); System.out.println("2. Parametri kerralla luettavien rivien lukumäärän (0 on vakio)."); } File tied = new File(args[0]); if (!tied.exists()) System.out.println("Tiedostoa " + tied + " ei löytynyt!"); try { rivit = Integer.parseInt(args[1]); } catch (NumberFormatException nfe) { System.out.println("2. Parametri ei ollut kokonaisluku!"); } TekstitiedostonIteroija iter = new TekstitiedostonIteroija(tied, rivit); if (iter.hasNext()) System.out.println(iter.next()); while(nappis.nextLine().compareTo("") == 0) { System.out.println("Tiedosto " + tied + ", (pelkkä enter jatkaa)"); System.out.println(iter.next()); } } }