Write to file probleme

  • Hallo Forum,
    es klingt trivial, aber ich bekomme es einfach nicht hin, eine Textdatei zu erzeugen
    und darin zyklisch Daten abzulegen.
    Im Netz sind viele Beispiele zu finden, aber bisher ist es mir nicht gelungen, damit eine Datei
    zu erzeugen.
    Ich möchte folgendes erreichen.
    Bei Programmstart soll einfach eine Textzeile in eine existierende Textdatei geschrieben
    (angehängt ) werden.
    Die Datei wird also bei jedem Start um eine Zeile größer.
    Wenn die Datei nicht existiert, soll sie erzeugt werden.
    Hat jemand ein funktionierendes Beispiel, wie das geht?


    Hier ist ein Beispiel, welches NICHT funktioniert. Es ist keine Textdatei zu finden:

  • Hat niemand eine Idee?
    Ich habe zwischenzeitlich noch mehr probiert.
    Ich bin mir ziemlich sicher, alles richtig gemacht zu haben.
    Hier ist ein anderes Beispiel, das ich versucht habe:


    Ich versuche diesmal einen Applikationsfolder auf dem internen Speicher anzulegen.
    mkdirs() liefert aber immer false zurück und das Verzeichnis wird nicht erzeugt.


    Und bevor jemand fragt: Ja, die permissions WRITE_EXTERNAL_STORAGE
    sind angegeben.

    Code
    File applFolder = getFilesDir();
    //kontrollausgabe des pfades
    Toast.makeText(getApplicationContext(), applFolder.getPath(),Toast.LENGTH_LONG).show();
    
    
    retVal = applFolder.mkdirs();
    if (retVal == false)
        Toast.makeText(getApplicationContext(), "RETVAL FALSE", Toast.LENGTH_LONG).show();
  • In android gibt es sharedpreferences die du für sowas auch verwenden kannst, oder die SQLite Datenbank die jeder App beiwohnt. Soll es jedoch explizit eine textdatei sein, musst du unterscheiden wo du diese schreibst. Wenn du sie auf die SD-Karte schreibst, dann brauchst du die Permission die du gesetzt hast. Zum lesen einer externen Datei benötigst du die Permission READ_EXTERNAL_STORAGE']READ_EXTERNAL_STORAGE.


    Zunächst würde ich erstmal ein Java-File anlegen, also:

    Java
    File file = new File("samplefile.txt");



    Anschließend prüfen ob es bereits existiert, wenn nicht muss es erstellt werden:

    Java
    if (!file.exists()) {
        try {
            file.createNewFile();
        } catch (IOException e) {
             e.printStackTrace();
        }
    }


    Wenn das erledigt ist, kannst du der Datei Inhalt hinzufügen:

    Java
    try {
        String text = new String("Hello Android");
        BufferedWriter buf = new BufferedWriter(new FileWriter(file, true)); 
        buf.append(text);
        buf.newLine();
        buf.close();
    } catch (IOException e) {
          e.printStackTrace();
    }


    Einfach mit einem BufferedWriter appenden ist auch performancetechnisch etwas besser. :)

  • Vielen Dank für die Antwort.
    Das Problem lag aber woanders:
    Ich hab's zwar noch nicht so richtig verstanden, aber für jede gestartete App
    (meine auch) scheint Android ein lokales Dateisystem anzulegen, welches
    nur für die App selbst sichtbar ist.
    Meine App hat die Dateien zwar erzeugt, man konnte sie nur nicht auf der SD-Karte
    sehen ( per USB auf einem PC ).


    Der Sinn war folgender:
    Ich wollte zyklisch Daten in eine Log-Datei schreiben und diese dann später per PC
    am USB-Port auslesen.
    Die Datei existiert. Ich kann sie auch per App zurücklesen.
    Nur vom PC aus kann ich sie nicht sehen und öffnen.

  • natürlich siehst du das nicht einfach so auf der sdkarte. Sorry, dachte das weißt du.Wenn du normal über eine app ein file schreibst, wird das erstmal im lokalen ordner der app gespeichert. willst du extern auf eine sd karte speichern, musst du natürlich beim schreiben der datei auch angeben, das es auf die sd karte geschrieben werden soll.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!