2010-05-25 25 views
59

Soy nuevo en el desarrollo de Android.¿Cómo puedo leer un archivo de texto desde la tarjeta SD en Android?

Necesito leer un archivo de texto de la tarjeta SD y mostrar ese archivo de texto. ¿Hay alguna manera de ver un archivo de texto directamente en Android o, de lo contrario, cómo puedo leer y visualizar el contenido de un archivo de texto?

+0

qué quiere saber cómo escribir un programa que lea un archivo txt o quiere saber cómo hacerlo como un usuario? – SteelBytes

Respuesta

120

In your layout necesitará algo para mostrar el texto. A TextView es la elección obvia. Por lo que tendrá algo como esto:

<TextView 
    android:id="@+id/text_view" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"/> 

y su código se verá así:

//Find the directory for the SD Card using the API 
//*Don't* hardcode "/sdcard" 
File sdcard = Environment.getExternalStorageDirectory(); 

//Get the text file 
File file = new File(sdcard,"file.txt"); 

//Read text from file 
StringBuilder text = new StringBuilder(); 

try { 
    BufferedReader br = new BufferedReader(new FileReader(file)); 
    String line; 

    while ((line = br.readLine()) != null) { 
     text.append(line); 
     text.append('\n'); 
    } 
    br.close(); 
} 
catch (IOException e) { 
    //You'll need to add proper error handling here 
} 

//Find the view by its id 
TextView tv = (TextView)findViewById(R.id.text_view); 

//Set the text 
tv.setText(text); 

Esto podría ir en el método de su ActivityonCreate(), o en otro lugar dependiendo de lo que acaba de es lo que quieres hacer?

+0

No funciona, devuelve el texto como nulo –

+1

@Android Developer - En el código de ejemplo, dice "Deberás agregar el correcto manejo de errores aquí". Hiciste eso porque probablemente sea el lugar más parecido encontrarás tu problema. –

+0

@Dave Webb disculpa por no actualizar mi comentario. a mí me funciona también En realidad, cuando coloco el archivo en el DDMS, borrará todos los datos del archivo, por eso devuelve null en mi extremo. –

5

En respuesta a

No codificar/sdcard/

veces TIENE QUE hardcode como en algunos modelos de teléfono del método API devuelve la memoria interna del teléfono.

Tipos conocidos: HTC One X y Samsung S3.

Environment.getExternalStorageDirectory().getAbsolutePath() gives a different path - Android

+0

para mí da un poco de basura de agumentation de seguridad /com.app.name/data/sdcard/ ... tenga en cuenta. para los registros para mí, lo codifico por fin, funciona. –

0
package com.example.readfilefromexternalresource; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 

import android.app.Activity; 
import android.app.ActionBar; 
import android.app.Fragment; 
import android.os.Bundle; 
import android.os.Environment; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.os.Build; 

public class MainActivity extends Activity { 
    private TextView textView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     textView = (TextView)findViewById(R.id.textView); 
     String state = Environment.getExternalStorageState(); 

     if (!(state.equals(Environment.MEDIA_MOUNTED))) { 
      Toast.makeText(this, "There is no any sd card", Toast.LENGTH_LONG).show(); 


     } else { 
      BufferedReader reader = null; 
      try { 
       Toast.makeText(this, "Sd card available", Toast.LENGTH_LONG).show(); 
       File file = Environment.getExternalStorageDirectory(); 
       File textFile = new File(file.getAbsolutePath()+File.separator + "chapter.xml"); 
       reader = new BufferedReader(new FileReader(textFile)); 
       StringBuilder textBuilder = new StringBuilder(); 
       String line; 
       while((line = reader.readLine()) != null) { 
        textBuilder.append(line); 
        textBuilder.append("\n"); 

       } 
       textView.setText(textBuilder); 

      } catch (FileNotFoundException e) { 
       // TODO: handle exception 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      finally{ 
       if(reader != null){ 
        try { 
         reader.close(); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 
      } 

     } 
    } 
} 
1
BufferedReader br = null; 
try { 
     String fpath = Environment.getExternalStorageDirectory() + <your file name>; 
     try { 
      br = new BufferedReader(new FileReader(fpath)); 
     } catch (FileNotFoundException e1) { 
      e1.printStackTrace(); 
     } 
     String line = ""; 
     while ((line = br.readLine()) != null) { 
     //Do something here 
     } 
+0

¿Puede dar una explicación a su código, por favor, como dónde usarlo, por qué hace eso el trabajo, etc. – Soma

0

Cuidado: algunos teléfonos tienen 2 sdcards, una fija y una una tarjeta extraíble interna. Puede encontrar el nombre de la última a través de una aplicación estándar: "Mijn Bestanden" (en inglés: "MyFiles"?) Cuando abro esta aplicación (elemento: todos los archivos) la ruta de la carpeta abierta es "/ sdcard ", al desplazarse hacia abajo hay una entrada" external-sd ", al hacer clic se abre la carpeta"/sdcard/external_sd/". Supongamos que quiero abrir un archivo de texto "MyBooks.txt" Me gustaría utilizar algo tan:

String Filename = "/mnt/sdcard/external_sd/MyBooks.txt" ; 
    File file = new File(fname);...etc... 
Cuestiones relacionadas