2012-05-11 28 views
5

soy nuevo en el desarrollo de Android y necesito su ayuda. Estaba bloqueando temas que son similares para mi desarrollo pero que no me ayudaron. Hasta ahora creo funciones que me dan los archivos de mi tarjeta SD y me muestra la lista de entonces. que está trabajandoCómo leer un archivo de texto seleccionado desde sdcard en android

este es el código para conseguir los caminos en sdcard:

package com.seminarskirad; 

import android.app.AlertDialog; 
import android.app.AlertDialog.Builder; 
import android.app.ListActivity; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.provider.MediaStore; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FilenameFilter; 
import java.io.IOException; 
import java.net.URISyntaxException; 
import java.util.ArrayList; 
import java.util.List; 

public class LoadActivity extends ListActivity{ 

    private enum DISPLAYMODE{ ABSOLUTE, RELATIVE; } 
    private final DISPLAYMODE displayMode = DISPLAYMODE.ABSOLUTE; 
    private List<String> directoryEntries = new ArrayList<String>(); 
    private File currentDirectory = new File("/"); 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      Browse(Environment.getExternalStorageDirectory()); 

     } 

     private void upOneLevel(){ 
       if(this.currentDirectory.getParent() != null) 
         this.Browse(this.currentDirectory.getParentFile()); 
     } 

     private void Browse(final File aDirectory){ 
       if (aDirectory.isDirectory()){ 
         this.currentDirectory = aDirectory; 
         fill(aDirectory.listFiles()); 

       } 
     } 

     private void fill(File[] files) { 
       this.directoryEntries.clear(); 
       if(this.currentDirectory.getParent() != null) 
         this.directoryEntries.add(".."); 

       switch(this.displayMode){ 
         case ABSOLUTE: 
           for (File file : files){ 
             this.directoryEntries.add(file.getPath()); 
           } 
           break; 
         case RELATIVE: // On relative Mode, we have to add the current-path to the beginning 
           int currentPathStringLenght = this.currentDirectory.getAbsolutePath().length(); 
           for (File file : files){ 
             this.directoryEntries.add(file.getAbsolutePath().substring(currentPathStringLenght)); 
           } 
           break; 
       } 

     ArrayAdapter<String> directoryList = new ArrayAdapter<String>(this, R.layout.load, this.directoryEntries); 
     this.setListAdapter(directoryList); 
     } 

     protected void onListItemClick(ListView l, View v, int position, long id) { 
       int selectionRowID = position; 
       String selectedFileString = this.directoryEntries.get(selectionRowID); 
       if(selectedFileString.equals("..")){ 
         this.upOneLevel(); 
       }else if(selectedFileString.equals()){ /// what to write here ??? 
         this.readFile(); ///what to write here??? 
       } else { 
         File clickedFile = null; 
         switch(this.displayMode){ 
           case RELATIVE: 
             clickedFile = new File(this.currentDirectory.getAbsolutePath() 
                           + this.directoryEntries.get(selectionRowID)); 
             break; 
           case ABSOLUTE: 
             clickedFile = new File(this.directoryEntries.get(selectionRowID)); 
             break; 
         } 
         if(clickedFile.isFile()) 
          this.Browse(clickedFile); 
       } 
     } 

     private void readFile() { 
// what to write here??? 
     } 

Lo sentimos i puedo poner la imagen porque no tengo la reputación, pero cuando lo ejecuto en mi emulador de un recibo algo así como esto:

/mnt/sdcard/kuzmanic.c 
/mnt/sdcard/text.txt 
/mnt/sdcard/DCIM 
/mnt/sdcard/LOST.DIR 

Así que lo que queremos hacer es cuando hago clic en el archivo o text.txt kuzmanic.c quiero abrir a continuación, en el mismo archivo de diseño, es mi archivo load.xml:

This is the code for the xml file: 
<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:textSize="18sp">  


</TextView> 

¿Qué debo escribir en mi código y tengo que escribir algo en el manifiesto?

+0

uso java.io .El uso InputStream para leer file.Same como se podría haber utilizado en tu habilidad Core Java arriba. –

Respuesta

0

He utilizado este código para leer un archivo de texto en la tarjeta SD,

public class ReadFileSDCardActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

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

     File dir = Environment.getExternalStorageDirectory(); 
     //File yourFile = new File(dir, "path/to/the/file/inside/the/sdcard.ext"); 

     //Get the text file 
     File file = new File(dir,"text.txt"); 
     // i have kept text.txt in the sd-card 

     if(file.exists()) // check if file exist 
     { 
       //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'); 
       } 
      } 
      catch (IOException e) { 
       //You'll need to add proper error handling here 
      } 
      //Set the text 
      tv.setText(text); 
     } 
     else 
     { 
      tv.setText("Sorry file doesn't exist!!"); 
     } 
    } 
} 
+0

gracias, esto funcionó muy bien, pero ahora tengo otro problema ... cuando muestro el texto, también me muestra la ruta de los directorios ... pero no sé cómo eliminarlo ... –

0

primero hay que dar una identificación a su TextView en el archivo load.xml y definir el TextView dentro de un diseño lineal. como esto

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" android:layout_height="match_parent" 
<TextView android:id="@+id/tv1 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:textSize="18sp"/> 

ahora usted tiene que establecer el diseño de su activity.you puede hacer esto en el método onCreate() solamente.

setContentView(R.layout.load); 

ahora crea un objeto TextVew como este.

TextView tview = (TextView) findViewById(R.id.tv1); 

Ahora usted tiene que leer el archivo de texto usando FileInputStream y mantenerlo en una variable de cadena.

después de eso, puede asignar la cadena a la vista de texto.

tview.setText(string variable name); 
7

Prueba este código:

package com.javasamples; 
import java.io.*; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.*; 
import android.view.View.OnClickListener; 
import android.widget.*; 

public class FileDemo2 extends Activity { 
    // GUI controls 
    EditText txtData; 
    Button btnWriteSDFile; 
    Button btnReadSDFile; 
    Button btnClearScreen; 
    Button btnClose; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    // bind GUI elements with local controls 
    txtData = (EditText) findViewById(R.id.txtData); 
    txtData.setHint("Enter some lines of data here..."); 

    btnWriteSDFile = (Button) findViewById(R.id.btnWriteSDFile); 
    btnWriteSDFile.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     // write on SD card file data in the text box 
     try { 
      File myFile = new File("/sdcard/mysdfile.txt"); 
      myFile.createNewFile(); 
      FileOutputStream fOut = new FileOutputStream(myFile); 
      OutputStreamWriter myOutWriter = 
            new OutputStreamWriter(fOut); 
      myOutWriter.append(txtData.getText()); 
      myOutWriter.close(); 
      fOut.close(); 
      Toast.makeText(getBaseContext(), 
        "Done writing SD 'mysdfile.txt'", 
        Toast.LENGTH_SHORT).show(); 
     } catch (Exception e) { 
      Toast.makeText(getBaseContext(), e.getMessage(), 
        Toast.LENGTH_SHORT).show(); 
     } 
    }// onClick 
    }); // btnWriteSDFile 

     btnReadSDFile = (Button) findViewById(R.id.btnReadSDFile); 
     btnReadSDFile.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      // write on SD card file data in the text box 
     try { 
      File myFile = new File("/sdcard/mysdfile.txt"); 
      FileInputStream fIn = new FileInputStream(myFile); 
      BufferedReader myReader = new BufferedReader(
        new InputStreamReader(fIn)); 
      String aDataRow = ""; 
      String aBuffer = ""; 
      while ((aDataRow = myReader.readLine()) != null) { 
       aBuffer += aDataRow + "\n"; 
      } 
      txtData.setText(aBuffer); 
      myReader.close(); 
      Toast.makeText(getBaseContext(), 
        "Done reading SD 'mysdfile.txt'", 
        Toast.LENGTH_SHORT).show(); 
     } catch (Exception e) { 
      Toast.makeText(getBaseContext(), e.getMessage(), 
        Toast.LENGTH_SHORT).show(); 
     } 
     }// onClick 
     }); // btnReadSDFile 

     btnClearScreen = (Button) findViewById(R.id.btnClearScreen); 
     btnClearScreen.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // clear text box 
       txtData.setText(""); 
      } 
     }); // btnClearScreen 

     btnClose = (Button) findViewById(R.id.btnClose); 
     btnClose.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       // clear text box 
       finish(); 
      } 
     }); // btnClose 

    }// onCreate 

}// AndSDcard 

el archivo de diseño es

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
android:id="@+id/widget28" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="#ff0000ff" 
android:orientation="vertical" 
xmlns:android="http://schemas.android.com/apk/res/android" 
> 
<EditText 
android:id="@+id/txtData" 
android:layout_width="fill_parent" 
android:layout_height="180px" 
android:textSize="18sp" /> 

<Button 
android:id="@+id/btnWriteSDFile" 
android:layout_width="143px" 
android:layout_height="44px" 
android:text="1. Write SD File" /> 

<Button 
android:id="@+id/btnClearScreen" 
android:layout_width="141px" 
android:layout_height="42px" 
android:text="2. Clear Screen" /> 

<Button 
android:id="@+id/btnReadSDFile" 
android:layout_width="140px" 
android:layout_height="42px" 
android:text="3. Read SD File" /> 

<Button 
android:id="@+id/btnClose" 
android:layout_width="141px" 
android:layout_height="43px" 
android:text="4. Close" /> 

</LinearLayout> 

enter image description here

Cuestiones relacionadas