bucle infinito

luisiyo
29 de Enero del 2006
Hola a todos. Necesito ayuda. Me han pedido que haga una clase en java que haga algo parecido a lo que hace el comando grep de unix(muestra las lineas que cumplan un determinado patron en un fichero).Tanto el patrón a buscar como el nombre del fichero serán dos parámetros de entrada del programa.
Me piden:
-Crear una clase Grep que construya el programa, y muestre por pantalla aquellas líneas que cumplan el patrón.
-Crear una clase PruebaGrep que reciba los parámetros de entrada (patrón y nombre de fichero) y que llame al comando Grep.
-Modificar el programa para introducir otro parámetro opcional en la entrada que indique si la búsqueda es sensible o no a mayúsculas/minúsculas. Éste será un parámetro opcional y si aparece deberá ser el primer parámetro.
-El patrón podrá ser tanto una palabra simple como una palabra compuesta. Los patrones compuestos se delimitan por comillas dobles.

No se si lo estoy entendiendo bien pero lo que llevo del programa es lo siguiente:

import java.io.*;

public class Grep{

private File nombre;
private String patron;

public Grep(String patron,File nombre){
this.nombre=nombre;
this.patron=patron;

}
/*Método que busca en el fichero elegido un patron y si lo encuentra devuelve
*toda la línea donde se encuentra el patron */
public void buscar(String patron,File nombre){
try{
BufferedReader g1= new BufferedReader(new FileReader(this.nombre));

String linea = g1.readLine();
while (linea != null){
if (linea.indexOf(patron) != -1){
linea = g1.readLine();
}
}
g1.close();
}
catch(Exception e){
System.out.println("Se ha producido un error");
}
}
}


Para ejecutarlo me he creado el siguiente main:

import java.io.*;

public class PruebaGrep{

public static void main(String[] args) {
if (args.length != 2 && args.length != 3) {
System.out.println("Los dos posibles usos son:");
System.out.println("Uso 1: java PruebaGrep <patron> <nombre fichero>");
System.out.println("Si desea que la busqueda no sea sensible a mayusculas deberá añadir el parametro -.Ejemplo:");
System.out.println("Uso 2: java PruebaGrep <patron> <nombre fichero> <->");
}
else if(args.length == 2){
String patron = new String(args[0]);
File nombre = new File(args[1]);

Grep busqueda1 = new Grep(patron, nombre);
busqueda1.buscar(patron, nombre);

}
else if (args[2]=="-"){
String patron = new String(args[0]);
File nombre = new File(args[1]);
String minus=patron.toLowerCase();

Grep busqueda2=new Grep(minus, nombre);
busqueda2.buscar(minus, nombre);
}
else{
System.out.println("Los dos posibles usos son:");
System.out.println("Uso 1: java PruebaGrep <patron> <nombre fichero>");
System.out.println("Si desea que la busqueda no sea sensible a mayusculas deberá añadir el parametro -.Ejemplo:");
System.out.println("Uso 2: java PruebaGrep <patron> <nombre fichero> <->");
}
}
}

Lo he mirado infinidad de veces, pero no veo donde está el error para que no salga del bucle y me ejecute correctamente. Por si a alguien no le ha quedado claro, soy novato en esto. Muchas gracias de antemano por ayudar.

profesorchiflado
29 de Enero del 2006
Si el patron no esta en la línea, no vuelves a leer y por tanto línea nunca es null lo que implica bucle infinito.

un saludo