2011-08-24 32 views
18

Tengo un archivo que contiene texto en una línea separada.
Quiero mostrar primero la línea, y luego, si presiono un botón, la segunda línea debe aparecer en el TextView y la primera línea debería desaparecer. Luego, si lo presiono nuevamente, se debe mostrar la tercera línea, y así sucesivamente.Cómo obtener lectura de archivo línea por línea

¿Debo tener que usar TextSwitcher o cualquier otra cosa? ¿Cómo puedo hacer eso?

Respuesta

31

te ha etiquetado como "android-activos", así que voy a asumir que su archivo está en la carpeta de activos. Aquí:

InputStream in; 
BufferedReader reader; 
String line; 
TextView text; 

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    text = (TextView) findViewById(R.id.textView1); 
    in = this.getAssets().open(<your file>); 
    reader = new BufferedReader(new InputStreamReader(in)); 
    line = reader.readLine(); 

    text.setText(line); 
    Button next = (Button) findViewById(R.id.button1); 
    next.setOnClickListener(this); 
} 

public void onClick(View v){ 
    line = reader.readLine(); 
    if (line != null){ 
     text.setText(line); 
    } else { 
     //you may want to close the file now since there's nothing more to be done here. 
    } 
} 

Haga una prueba. No he podido verificar que funcione por completo, pero creo que esta es la idea general que desea seguir. Naturalmente, querrás reemplazar cualquier R.id.textView1/button1 con los nombres que hayas especificado en tu archivo de diseño.

También: Hay muy poco error al verificar aquí por el espacio. Deberá verificar que su activo exista y estoy seguro de que debe haber un bloque try/catch cuando abra el archivo para leerlo.

Editar: error grande, no es R.layout, es R.id He editado mi respuesta para solucionar el problema.

+1

También puedes obtener reputación aceptando una respuesta si te ha ayudado. – Otra

15

siguiente código debe cumplir con su necesidad

try { 
// open the file for reading 
InputStream instream = new FileInputStream("myfilename.txt"); 

// if file the available for reading 
if (instream != null) { 
    // prepare the file for reading 
    InputStreamReader inputreader = new InputStreamReader(instream); 
    BufferedReader buffreader = new BufferedReader(inputreader); 

    String line; 

    // read every line of the file into the line-variable, on line at the time 
    do { 
    line = buffreader.readLine(); 
    // do something with the line 
    } while (line != null); 

} 
} catch (Exception ex) { 
    // print stack trace. 
} finally { 
// close the file. 
instream.close(); 
} 
+0

¿De dónde se obtiene 'openFileInput()' -method? Además, siempre debe usar un bloque "try/finally" para cerrar transmisiones (para que se cierren cuando se lanza una excepción) –

+1

Metodología correcta, pero ha usado condiciones de estilo C que no se compilarán. no permite la conversión automática de null/int/assignment etc. a boolean, por lo que 'if (instream)' y 'while (line = buffreader.readLine())' necesitan ser reemplazados por algo como 'if (instream! = null) 'y' while (buffreader.hasNext()) ' –

+1

BufferedReader no tiene una función hasNext(). Solo comprueba si es nulo –

0

Usted puede simplemente utilizar un TextView y una ButtonView. Lea el archivo usando un BufferedReader, le proporcionará una buena API para leer líneas una por una. Al hacer clic en el botón simplemente cambia el texto de la vista de texto usando settext.

También podría considerar leer todo el contenido del archivo y ponerlo dentro de una lista de cadenas, esto puede ser más claro si su archivo no es demasiado grande.

Saludos, Stéphane

Cuestiones relacionadas