package javacodebook.io.findinfile;

import java.io.*;

/*
 * Textdateien auf bestimmte Texte durchsuchen.
 */
public class FindInFile {

    public static int findStringInFile(String fileName, String searchText)
    throws IOException {
        File f = new File(fileName);
        return findStringInFile(f, searchText);
    }

    public static int findStringInFile(File file, String searchText)
    throws IOException {
        int foundLines = 0;
        if(!file.exists()) {
            System.out.println("Datei existiert nicht: " + file.getAbsolutePath());
            return -1;
        }

        //Die Klasse LineNumberReader erspart das mitzählen der Position innerhalb einer
        //Datei von Hand.
        LineNumberReader in = new LineNumberReader(new FileReader(file));
        String line = null;
        boolean foundInFile = false;
        while((line = in.readLine())!= null) {
            if(line.indexOf(searchText) > -1) {
                foundLines++;
                if(!foundInFile) {
                    foundInFile = true;
                    System.out.println("Ergebnis in Datei:" + file.getAbsolutePath());
                }
                System.out.println("Zeile " + in.getLineNumber() + ": " + line);
            }
        }
        in.close();
        return foundLines;
    }

    public static void main(String[] args) {
        if(args.length < 2) {
            printUsage();
            return;
        }
        String searchText = args[0];
        int foundLines = 0;
        try {
            for(int i = 1; i < args.length; i++) {
                foundLines += findStringInFile(args[i], searchText);
            }
            System.out.println("Es wurden " + foundLines + " Stellen mit dem gesuchten Text gefunden");
        }
        catch(IOException e) {
            e.printStackTrace(System.out);
        }
    }

    private static void printUsage() {
        System.out.println("Benutzung: java javacodebook.io.findinfile.FindInFile Suchtext Dateiname1 Dateiname2 ...");
    }
}
