Por lógica :
//found se inicializa como false
...
boolean found = false;
...
//found toma su valor "definitivo" en el método search(ID) de el objeto
// leerObj de la clase leer , postea esa clase a ver si entre todos ...
found = leerObj.search(ID);
Y como vemos que found nunca toma el valor true , supongo que ese método no hace lo que tiene que hacer ... Sin datos ... Sin datos ... No puedo proseguir
Investiga por hay