• Viernes 8 de Noviembre de 2024, 11:49

Autor Tema:  Extrano Comportamiento De Mi Ide  (Leído 2162 veces)

SFRJ

  • Miembro MUY activo
  • ***
  • Mensajes: 115
    • Ver Perfil
Extrano Comportamiento De Mi Ide
« en: Miércoles 28 de Mayo de 2008, 22:49 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Extrano Comportamiento De Mi Ide
« Respuesta #1 en: Jueves 29 de Mayo de 2008, 03:30 »
0
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
  1. import java.io.*;
  2. public class BackUpCopyMaker {
  3.  
  4.   public static void main(String [] args) {
  5.     try {
  6.       FileWriter fw = new FileWriter("priprema.txt");
  7.       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  8.       StringBuffer sb = new StringBuffer("");
  9.       String linea = new String("");
  10.  
  11.       System.out.println("Enter Text: ");
  12.  
  13.       do {
  14.         linea = br.readLine();
  15.         sb.append(linea + "\r\n");
  16.       } while(!linea.equals("exit"));
  17.      
  18.       fw.write(sb.toString());
  19.       fw.close();
  20.  
  21.     } catch(IOException e) {
  22.       System.err.println(e.getMessage());
  23.     }
  24.   }
  25. }
  26.  
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
  1. do {
  2.   linea = br.readLine();
  3.   if(!linea.equals("exit"))
  4.     sb.append(linea + "\r\n");
  5. } while(!linea.equals("exit"));
  6.  
Mi deseo: que le otorguen el premio Nobel de la paz al inventor del Copy & Paste. Gracias por evitarme tantas peleas con el tiempo y aumentar la esperanza de vida de mi teclado \":)\"

SFRJ

  • Miembro MUY activo
  • ***
  • Mensajes: 115
    • Ver Perfil
Re: Extrano Comportamiento De Mi Ide
« Respuesta #2 en: Jueves 29 de Mayo de 2008, 19:22 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Extrano Comportamiento De Mi Ide
« Respuesta #3 en: Viernes 30 de Mayo de 2008, 00:49 »
0
Código: Text
  1. import java.io.*;
  2. public class BackUpCopyMaker {
  3.  
  4.  public static void main(String [] args) {
  5.    try {
  6.      FileWriter fw = new FileWriter("priprema.txt");
  7.      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  8.      StringBuffer sb = new StringBuffer("");
  9.      String linea = new String("");
  10.  
  11.      System.out.println("Ingrese texto. Para salir \"exit, ctrl+z, ctrl+c\": ");
  12.  
  13.      while(((linea = br.readLine())!=null) && (!linea.equals("exit"))){
  14.        sb.append(linea + "\r\n");
  15.      }
  16.  
  17.      fw.write(sb.toString());
  18.      fw.close();
  19.  
  20.    } catch(IOException e) {
  21.      System.err.println(e.getMessage());
  22.    }
  23.  }
  24. }
  25.  

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".
Mi deseo: que le otorguen el premio Nobel de la paz al inventor del Copy & Paste. Gracias por evitarme tantas peleas con el tiempo y aumentar la esperanza de vida de mi teclado \":)\"

SFRJ

  • Miembro MUY activo
  • ***
  • Mensajes: 115
    • Ver Perfil
Re: Extrano Comportamiento De Mi Ide
« Respuesta #4 en: Viernes 30 de Mayo de 2008, 22:56 »
0
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.

emuller

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Extrano Comportamiento De Mi Ide
« Respuesta #5 en: Sábado 31 de Mayo de 2008, 00:31 »
0
Con CTRL+C O CTRL+Z se corta la entrada de la consola y la lectura devuelve null. En la documentación de la API (yo estoy usando el JDK 1.6u5), si buscás la clase Console dice que los métodos de lectura de esa clase retornan null si hacés CTRL+Z. Luego probé si pasaba lo mismo si leías la entrada con el BufferedReader y haciendo CTRL+Z y funcionó. Luego probé con CTRL+C y también funcionó. Por eso lo del br.readLine == null.

¿Era esa tu duda?
Mi deseo: que le otorguen el premio Nobel de la paz al inventor del Copy & Paste. Gracias por evitarme tantas peleas con el tiempo y aumentar la esperanza de vida de mi teclado \":)\"