2012-05-11 13 views
5

Ich bin neu bei Android-Entwicklung, und ich brauche Ihre Hilfe. Ich sperrte Themen ein, die für meine Entwicklung ähnlich sind, aber nicht, dann hilf mir. Bisher habe ich Funktionen erstellt, die mir die Dateien von meiner SD-Karte holen und mir dann die Liste anzeigen. Das funktioniertSo lesen Sie eine ausgewählte Textdatei von SDCard auf Android

diese Option, um die Pfade auf sdcard den Code ist:

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??? 
     } 

Leider ich das Bild setzen kippe, weil ich Ruf nicht haben, aber wenn ich es auf meinem Emulator ein etwas bekommen wie dies:

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

Also, was ich tun möchte, ist, wenn ich auf die Datei text.txt oder kuzmanic.c klicken ich dann in der gleichen Layout-Datei geöffnet werden soll, das ist meine load.xml Datei:

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> 

Was muss ich in meinen Code schreiben und muss ich etwas in das Manifest schreiben ???

+0

Verwendung java.io .Verwendung Input file.Same zu lesen, wie Sie verwendet haben in deinem Core Java Fähigkeiten. –

Antwort

0

ich diesen Code verwendet, um eine Textdatei in SD-Karte zu lesen,

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

danke mann das funktionierte nur gut, aber jetzt habe ich ein anderes problem ... wenn ich den text anzeigen es zeigt mir auch die verzeichnisse pfad..aber ich weiß nicht wie man das entfernen .... –

0

zuerst müssen Sie eine ID zu Ihrem Textview in die load.xml Datei geben und die Textview in einem linearen Layout definieren. wie diese

<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"/> 

jetzt müssen Sie das Layout Ihres activity.you setzen dies nur in der onCreate() -Methode kann tun.

setContentView(R.layout.load); 

Jetzt machen Sie ein TextVew Objekt wie folgt.

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

jetzt müssen Sie die Textdatei mit Fileinputstream lesen und in ein String-Variable zu halten.

Danach können Sie die Zeichenfolge der Textansicht zuweisen.

tview.setText(string variable name); 
7

diesen Code Versuchen:

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 

die Layoutdatei ist

<?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

Verwandte Themen