Programación General > Java

 Extrano Comportamiento De Mi Ide

(1/2) > >>

SFRJ:
Amigos os mando un codigo interesante, bamos ami me lo parece, porque resusta que ocurre algo bastante extrano que no acabo de entender el modelo.
Explico:
 He utilizado para hacer un pequeno codigo que crea un archivo de texto y en el escribe, lo que nosotros introducimos atraves del teclado y cuando no queramos itroducir mas datos simplemente escribimos exit.
El programa ami me funciona, pero he notado algo que me parece bastante raro y es que cuando yo introduzco un numero de lineas de texto inpar, el programa funciona correctamente, pero cuando el numero de lineas es par no permite cerrar el programa con el comando exit.
Echarle un vistazo siquereis aber si encontrais el motivo. Un saludo.


import java.io.*;
public class BackUpCopyMaker {
/**WEARD! ODD NUM OF LINES WORK'S BUT PAIR NUM OF LINES DOES NOT WORK
 * WHY?
**/
    public static void main(String [] args) {
        try {
            FileWriter fw = new FileWriter("priprema.txt");
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringBuffer sb = new StringBuffer("");
           
            System.out.println("Enter Text: ");
           
//             fw.write(br.readLine());//One treba u ovaj program samo je primijer kako bi citao samo jedna linije iz testatura
//             fw.close();//
            do {
               sb.append(br.readLine() + "\n");
               fw.write(sb.toString());
            }
            while(!br.readLine().equals("exit"));
            fw.close();
//             br.close();//WE DONT NEED TO CLOSE br. DONT WE?
        }
        catch(IOException e) {
            System.err.println(e.getMessage());
        }
    }
}

emuller:
Lo probé y pude solucionarlo. Creo que el problema es que en el do ... while hacés dos veces readLine, una para agregar al StringBuffer (sb) y otra en la condición del while.
Lo solucioné llamando una sola vez a readLine y guardando lo que retorna en un String temporal. Me quedó así:

--- Código: Text ---import java.io.*;public class BackUpCopyMaker {   public static void main(String [] args) {    try {      FileWriter fw = new FileWriter("priprema.txt");      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));      StringBuffer sb = new StringBuffer("");      String linea = new String("");       System.out.println("Enter Text: ");       do {        linea = br.readLine();        sb.append(linea + "\r\n");      } while(!linea.equals("exit"));            fw.write(sb.toString());      fw.close();     } catch(IOException e) {      System.err.println(e.getMessage());    }  }} Con este código, el "exit" también se guarda en el archivo. Si no querés que lo haga debes cambiar el do ... while de esta forma:

--- Código: Text ---do {  linea = br.readLine();  if(!linea.equals("exit"))     sb.append(linea + "\r\n");} while(!linea.equals("exit")); 

SFRJ:
Genial.
Hera mas sencillo de lo que parecia.
Me acabe complicando un poco :)
Muchas gracias companero

Por casualidad sabes si existe alguna forma de en vez de escribir la palabra exit, para dejar de escribir en el file se puede utilizar la tecla Esc.
Como se haria, o algo parecido. como por ejemplo crtl + q

emuller:

--- Código: Text ---import java.io.*;public class BackUpCopyMaker {  public static void main(String [] args) {   try {     FileWriter fw = new FileWriter("priprema.txt");     BufferedReader br = new BufferedReader(new InputStreamReader(System.in));     StringBuffer sb = new StringBuffer("");     String linea = new String("");      System.out.println("Ingrese texto. Para salir \"exit, ctrl+z, ctrl+c\": ");       while(((linea = br.readLine())!=null) && (!linea.equals("exit"))){       sb.append(linea + "\r\n");     }      fw.write(sb.toString());     fw.close();    } catch(IOException e) {     System.err.println(e.getMessage());   } }} 
Con este código, el programa sale con CTRL+C, o CTRL+Z y luego ENTER (creo que en sistemas tipo UNIX es con CTRL+D), o escribiendo "exit".

SFRJ:
Amigo al fijarme un poco mejor me he dao cuenta que en el argumento:

while(((linea = br.readLine())!=null) && (!linea.equals("exit"))){

en ningun sitio pone ctrl+z o +c. no funciona como esperabamos.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa