Problema con BufferedReader y readLine()
Publicado por Alejanfro (1 intervención) el 29/06/2010 17:20:21
Tengo el siguiente código:
package sqlite;
/**
*
* @author Alejandro
*/
import java.io.*;
import java.util.StringTokenizer;
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException
{
char opcion;
SetDeInstrucciones instrucciones = new SetDeInstrucciones();
BufferedReader lector = new BufferedReader(new InputStreamReader(System.in));
String nombreBD="";
System.out.println();
System.out.println("Bienvenido a SQLite");
System.out.println("=====================================");
do {
System.out.println();
System.out.println("Pulse una opción");
System.out.println("1.Abrir una nueva base de datos");
System.out.println("2.Crear una base de datos nueva");
System.out.println("3.Salir");
System.out.println();
opcion = (char) System.in.read();
System.out.println();
switch (opcion) {
case '1' : System.out.println("Introduzca el nombre de la base de datos a abrir (Introduzca nombre absoluto) ");
nombreBD = lector.readLine();
/* si el nombre introducido no empieza por "/" es que se está introduciendo
* un nombre relativo al directorio actual de ejecución
*/
nombreBD = nombreBD.trim();
try {
if (nombreBD.charAt(0) != '/') {
String dirActual = System.getProperty("user.dir");
dirActual.concat(nombreBD);
nombreBD = dirActual;
//Para controlar
System.out.print("El nombre de la base de datos es " + nombreBD);
}
File fichero = new File(nombreBD);
if (fichero.exists()) {
System.out.println("La base de datos se ha cargado correctamente");
System.out.println();
System.out.print("> ");
String instruccion = lector.readLine();
StringTokenizer analizador = new StringTokenizer(instruccion, "");
// Aquí vienen los juegos de instrucciones
}
else {
System.out.println("Error: el fichero indicado no existe o no es correcto");
System.out.println();
}
}
catch (StringIndexOutOfBoundsException e) {
System.out.println("No ha introducido un nombre de fichero");
}
break;
case '2' : System.out.println("Introduzca el nombre que le quiere dar a la nueva base de datos");
nombreBD = lector.readLine();
System.out.println(nombreBD);
System.out.println();
break;
case '3' : System.out.println ("Hasta pronto");
break;
default : System.out.println("No es una opcion válida. Repita, por favor");
break;
}
} while (opcion != '3');
}
}
El problema que tengo es en las dos líneas nombreBD = lector.readLine(); no sé por qué, pero no se para la ejecución del programa para esperar la entrada desde el teclado, de forma que nombreBD siempre es vacío .... ???? He buscado bastante por internet y veo que para leer un string desde el teclado, esta es la forma de hacerlo. Sin embargo no sé por qué pero no funciona. ¿Alguna ayuda? ¿Qué esto haciendo mal? Gracias. Un saludo
package sqlite;
/**
*
* @author Alejandro
*/
import java.io.*;
import java.util.StringTokenizer;
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException
{
char opcion;
SetDeInstrucciones instrucciones = new SetDeInstrucciones();
BufferedReader lector = new BufferedReader(new InputStreamReader(System.in));
String nombreBD="";
System.out.println();
System.out.println("Bienvenido a SQLite");
System.out.println("=====================================");
do {
System.out.println();
System.out.println("Pulse una opción");
System.out.println("1.Abrir una nueva base de datos");
System.out.println("2.Crear una base de datos nueva");
System.out.println("3.Salir");
System.out.println();
opcion = (char) System.in.read();
System.out.println();
switch (opcion) {
case '1' : System.out.println("Introduzca el nombre de la base de datos a abrir (Introduzca nombre absoluto) ");
nombreBD = lector.readLine();
/* si el nombre introducido no empieza por "/" es que se está introduciendo
* un nombre relativo al directorio actual de ejecución
*/
nombreBD = nombreBD.trim();
try {
if (nombreBD.charAt(0) != '/') {
String dirActual = System.getProperty("user.dir");
dirActual.concat(nombreBD);
nombreBD = dirActual;
//Para controlar
System.out.print("El nombre de la base de datos es " + nombreBD);
}
File fichero = new File(nombreBD);
if (fichero.exists()) {
System.out.println("La base de datos se ha cargado correctamente");
System.out.println();
System.out.print("> ");
String instruccion = lector.readLine();
StringTokenizer analizador = new StringTokenizer(instruccion, "");
// Aquí vienen los juegos de instrucciones
}
else {
System.out.println("Error: el fichero indicado no existe o no es correcto");
System.out.println();
}
}
catch (StringIndexOutOfBoundsException e) {
System.out.println("No ha introducido un nombre de fichero");
}
break;
case '2' : System.out.println("Introduzca el nombre que le quiere dar a la nueva base de datos");
nombreBD = lector.readLine();
System.out.println(nombreBD);
System.out.println();
break;
case '3' : System.out.println ("Hasta pronto");
break;
default : System.out.println("No es una opcion válida. Repita, por favor");
break;
}
} while (opcion != '3');
}
}
El problema que tengo es en las dos líneas nombreBD = lector.readLine(); no sé por qué, pero no se para la ejecución del programa para esperar la entrada desde el teclado, de forma que nombreBD siempre es vacío .... ???? He buscado bastante por internet y veo que para leer un string desde el teclado, esta es la forma de hacerlo. Sin embargo no sé por qué pero no funciona. ¿Alguna ayuda? ¿Qué esto haciendo mal? Gracias. Un saludo
Valora esta pregunta


0