sentencia scanner loop declarar como java bufferedreader

java - loop - scanner y bufferedreader



Usando BufferedReader.readLine() en un bucle while correctamente (6)

En caso de que si todavía está tropezando con esta pregunta. Hoy en día las cosas se ven mejor con Java 8:

try { Files.lines(Paths.get(targetsFile)).forEach( s -> { System.out.println(s); // do more stuff with s } ); } catch (IOException exc) { exc.printStackTrace(); }

Así que tengo un problema al leer un archivo de texto en mi programa. Aquí está el código:

try{ InputStream fis=new FileInputStream(targetsFile); BufferedReader br=new BufferedReader(new InputStreamReader(fis)); //while(br.readLine()!=null){ for(int i=0;i<100;i++){ String[] words=br.readLine().split(" "); int targetX=Integer.parseInt(words[0]); int targetY=Integer.parseInt(words[1]); int targetW=Integer.parseInt(words[2]); int targetH=Integer.parseInt(words[3]); int targetHits=Integer.parseInt(words[4]); Target a=new Target(targetX, targetY, targetW, targetH, targetHits); targets.add(a); } br.close(); } catch(Exception e){ System.err.println("Error: Target File Cannot Be Read"); }

El archivo del que estoy leyendo es de 100 líneas de argumentos. Si utilizo un bucle for funciona perfectamente. Si utilizo la instrucción while (la que comento sobre el bucle for), se detiene en 50. Existe la posibilidad de que un usuario pueda ejecutar el programa con un archivo que tenga cualquier número de líneas, por lo que mi implementación actual para el bucle no será válida. t trabajo

¿Por qué la línea while(br.readLine()!=null) detiene en 50? Revisé el archivo de texto y no hay nada que lo cuelgue.

No obtengo ningún error del try-catch cuando uso el bucle while, por lo que estoy perplejo. ¿Alguien tiene alguna idea?


Estás llamando a br.readLine() por segunda vez dentro del bucle.
Por lo tanto, terminas leyendo dos líneas cada vez que das vueltas.


Gracias a SLaks y jpm por su ayuda. Fue un error bastante simple que simplemente no vi.

Como señaló SLaks, se llamaba a br.readLine () dos veces en cada bucle, lo que hacía que el programa solo obtuviera la mitad de los valores. Aquí está el código fijo:

try{ InputStream fis=new FileInputStream(targetsFile); BufferedReader br=new BufferedReader(new InputStreamReader(fis)); String words[]=new String[5]; String line=null; while((line=br.readLine())!=null){ words=line.split(" "); int targetX=Integer.parseInt(words[0]); int targetY=Integer.parseInt(words[1]); int targetW=Integer.parseInt(words[2]); int targetH=Integer.parseInt(words[3]); int targetHits=Integer.parseInt(words[4]); Target a=new Target(targetX, targetY, targetW, targetH, targetHits); targets.add(a); } br.close(); } catch(Exception e){ System.err.println("Error: Target File Cannot Be Read"); }

¡Gracias de nuevo! ¡Ustedes son geniales!


Puedes usar una estructura como la siguiente:

while ((line = bufferedReader.readLine()) != null) { System.out.println(line); }


También muy completo ...

try{ InputStream fis=new FileInputStream(targetsFile); BufferedReader br=new BufferedReader(new InputStreamReader(fis)); for (String line = br.readLine(); line != null; line = br.readLine()) { System.out.println(line); } br.close(); } catch(Exception e){ System.err.println("Error: Target File Cannot Be Read"); }


Concept Solution:br.read() returns particular character''s int value so loop continue''s until we won''t get -1 as int value and Hence up to there it print br.eadline() which returns a line into String form. Way 1: while(br.read()!=-1) { //continues loop until we won''t get int value as a -1 System.out.println(br.readLine()); } Way 2: while((line=br.readLine())!=null) { System.out.println(line); } Way 3: for(String line=br.readLine();line!=null;line=br.readLine()) { System.out.println(line); }`` Way 4: It''s an advance way to read file using collection and arrays concept How we iterate using for each loop.

verifíquelo aquí http://www.java67.com/2016/01/how-to-use-foreach-method-in-java-8-examples.html