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 ..."); } }