2012-12-21 6 views
7

Mein Code zu erhalten, ist folgende ::Wie richtigen Weg Dateien in android

Scanner sc = null; 
try { 
    sc = new Scanner(new File("assets/mainmenu/readSourceFile.txt")); 
} catch (FileNotFoundException e1) { 
    // TODO Auto-generated catch block 
    System.out.println(e1.toString()); 
    e1.printStackTrace(); 
} 

Dann logcat zeigen Ausnahme java.io.FileNotFoundException

Wie kann ich meine Datei finden? Ich habe versucht,

sc = new Scanner(new File("mainmenu/readSourceFile.txt"));

Es ist jedoch nach wie vor FilenotFoundException

Meine Datei in Ordner Assets ist Wurf/mainmenu/readSourceFile.txt

und ich habe versucht dieses ::

private InputStream is; 
try { 
     is = this.getResources().getAssets().open("mainmenu/readSourceFile.txt"); 
    } catch (IOException e) { 
     e.toString(); 
    } 

Ich benutze getAssets, um auf Assets-Datei in Android zuzugreifen. Aber wie kann ich nehme an Textdatei zu lesen, wenn ich InputStream

+0

Ist alle Ihre Verzeichnisse im selben Projekt liegt Wenn ja, geben Sie einfach Ihren Pfad als ./assets/mainmenu/readSourceFile.txt .. – gks

+0

@barsSala Ihre Textdatei befindet sich im Asset-Ordner? – vnshetty

+0

sicher, meine Textdatei befindet sich in Assets/mainmenu/readSourceFile.txt – barssala

Antwort

1

verwenden Sie versuchen, diese ... Die Hoffnung wird es

sc = new Scanner(new File("file:///android_asset/mainmenu/readSourceFile.txt"); 

bearbeiten versuchen, arbeiten diese

AssetFileDescriptor descriptor = getAssets().openFd("mainmenu/readSourceFile.txt"); 
FileReader reader = new FileReader(descriptor.getFileDescriptor()); 

von hier kopiert Asset folder path

+0

Sorry, aber ich Habe 'FileNotFoundException' – barssala

+0

@bars sala siehe edit – vnshetty

+0

für weitere Informationen. java.io.FileNotFoundException:/file: /android_asset/mainmenu/readSourceFile.txt – barssala

0

Sie können nicht auf den Ordner assets Ihrer Android-Anwendung zugreifen, als wären es normale Dateien im Dateisystem (Hinweis: sie sind es nicht). Stattdessen müssen Sie AssetManager. Rufen Sie getAssets() auf Ihrem Aktivitäts-/Anwendungskontext, um die AssetManager zu erhalten.

Sobald Sie dies haben, können Sie open("mainmenu/readSourceFile.txt") verwenden, um eine zu erhalten.

Sie können jetzt lesen InputStream wie Sie andere würden. Apache Commons IO ist eine großartige Bibliothek für die Arbeit mit Eingabe- und Ausgabeströmen. Je nachdem, wie Sie die Daten erhalten möchten, können Sie versuchen:

  • die gesamte Datei in einen String lesen:

    try { 
        String contents = IOUtils.toString(in); 
    } finally { 
        IOUtils.closeQuietly(in); 
    } 
    
  • die gesamte Datei lesen in eine Liste von Strings, eine pro Zeile :

    try { 
        List<String> lines = IOUtils.readLines(in); 
    } finally { 
        IOUtils.closeQuietly(in); 
    } 
    
  • Iterate durch die Datei eine Zeile zu einem Zeitpunkt:

    try { 
        LineIterator it = IOUtils.lineIterator(in, "UTF-8"); 
        while (it.hasNext()) { 
         String line = it.nextLine(); 
         // do something with line 
        } 
    } finally { 
        IOUtils.closeQuietly(in); 
    } 
    
+0

Ich habe 'InputStream' versucht und kann jetzt die Datei öffnen. Aber ich weiß nicht, wie man Textdateien liest, wenn ich 'InputStream' verwende. – barssala

+0

[Apache Commons IO] (http://commons.apache.org/io/description.html) macht dies einfach. Laden Sie 'commons-io-2.4.jar' herunter und fügen Sie es Ihrem Java-Build-Pfad hinzu, dann können Sie die Datei auf einmal lesen:' String mContents = IOUtils.toString (mInputStream) '. Dieser Link zeigt auch, wie man das selbe "manuell" macht ('InputStream' ->' InputStreamReader' -> 'BufferedReader' -> loop), wenn Sie aus irgendeinem Grund nicht' IOUtils' verwenden wollen ... – user113215

0

Ich hatte das gleiche Problem. Ich bemerkte, dass die Datei die Hierarchie nicht enthalten sollte. Das funktionierte für mich, wenn jemand in Zukunft dasselbe Problem hatte. `

InputStream is=null; 

    try { 
     is=activity.getAssets().open("fileInAssets.dat"); 
    } catch (IOException e1) { 
     Log.e(TAG, "Erro while openning hosts file."); 
     e1.printStackTrace(); 
    } 

`

Verwandte Themen