Daten in Datei speichern

  • Antworten:9
Robbiani Renato
  • Forum-Beiträge: 609

10.10.2019, 17:14:51 via Website

Hallo zusammen

Ich möchte meine Daten in einer Datei auf mein Handy speichern.

Dies mache ich wie folgt:

final static String fileName = "sun_app.dat";

final static String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/instinctcoder/readwrite/" ;

public void save_data( List list_ort ){
try {
//Daten Speichern
new File(path ).mkdir();
File file = new File(path+ fileName);
if( !file.exists() ){
file.createNewFile();
}
FileOutputStream fileStream = new FileOutputStream(file, false);
ObjectOutputStream os = new ObjectOutputStream(fileStream);
os.writeObject( list_ort );
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}

public List load_data() {
List list_orte = new ArrayList();

    try {
        FileInputStream fileInputStream = new FileInputStream(new File(path + fileName));
        ObjectInputStream oInputStream = new ObjectInputStream(fileInputStream);
        list_orte = (List<Ort>;) oInputStream.readObject();
        oInputStream.close();
    } catch (IOException | ClassNotFoundException e) {
        e.printStackTrace();
    }
    return list_orte;
}   

Jedes mal wenn ich die Datei anlegen will wird eine Exception geworfen mit dem Hinweis, dass die Datei nicht gefunden wird oder der Pfad falsch ist.

Was mache ich falsch?

Gruss Renato

Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.10.2019, 17:29:05 via Website

Kannst du bitte die Exception posten mit konkretem Pfad?

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Robbiani Renato
  • Forum-Beiträge: 609

10.10.2019, 18:07:49 via Website

Der Pfad lautet : "/storage/emulated/0/instinctcoder/readwrite/sun_app.dat"

Die Fehlermeldung : java.io.IOException: open failed: ENOENT (No such file or directory)

Reichtdas?

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.10.2019, 18:15:05 via Website

Aber in welcher Zeile des Codes tritt der fehler auf?

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

10.10.2019, 18:24:46 via Website

Hallo mal eine Frage gibt es überhaupt dem path

"/storage/emulated/0/instinctcoder/readwrite/"
Besser gesagt den Ordner auf dem Handy?
Wenn nicht musst du ihn vorher auch erst erstellen bevor die Datei erstellt werden kann.

new File(path ).mkdir();
wird nicht gehen da du gleich zwei Ordner erstellen willst.
"/instinctcoder/readwrite/" sind bestimmt zwei. Die es noch nicht gibt.

Wenn es gleich zwei oder mehr sein soll benutze
mkdirs()

Hast du auch die permission manifest und auch zu Laufzeit?

— geändert am 10.10.2019, 18:28:02

Hilfreich?
Pascal P.
Kommentieren
Robbiani Renato
  • Forum-Beiträge: 609

11.10.2019, 08:01:19 via Website

Hallo ihr Helfer

Ja ein Manifest habe ich.

Der Absturz geschieht bei folgender Anweisung "file.createNewFile(); "

Ich denke, dass ich das mit dem Verzeichnis nochmals anschauen.

Gruss Renato

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

11.10.2019, 10:55:53 via Website

Ja musst du. Zwei unter Ordner auf einmal mit mkdir geht nicht dafür gib es mkdirs.

Wegen den permission welche android Version hast du?
Ab 6.0 reicht das Manifest nicht mehr aus. Da brauchst du auch die zur Laufzeit.

Aber eine Exeption permission denied hast du ja nicht.

Hilfreich?
Kommentieren
Robbiani Renato
  • Forum-Beiträge: 609

11.10.2019, 18:03:07 via Website

Ciao Jokel

Ich habe ein uraltes Handy mit Android 5.2. Aber für neuere Versionen habe ich eine Abfrage eingebaut. Später will ich ja die App veröffentlichen.

Eine Frage bereitet mir noch Bauchschmerzen. Bestimmt weist du mir da Rat. Wie kann ich den Verzeichnissbaum meines Handys anschauen?

Gruss Renato

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

11.10.2019, 18:51:42 via Website

Hallo das Problem kommt mit Sicherheit schon hier
new File(path ).mkdir();
mache
boolean b l= new File(path ).mkdirs();
und du wirst sehen das die variable True ist bei mkdir wird sie Fasle sein

Wenn du Android 5 hast sollte es ohne Laufzeit Permissen gehen.

Für dein Handy lade dir irgend ein FileExplorer runter und schaue auf der internen SdKarte nach da wird der Ordner sein. Aber nur wenn du mkdirs benutz.

Ps. das du ein Manifest hast ist klar ich meinte ob du da auch die Permission geset hast.
die brauchst du auch bei API 22

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

— geändert am 11.10.2019, 19:06:17

Hilfreich?
Kommentieren
Robbiani Renato
  • Forum-Beiträge: 609

14.10.2019, 21:30:04 via Website

Ciao Jokel

Danke für den Hinweis auf die Permission. Ich war felsen fest davon überzeugt, dass ich die drin habe. Aber ich habe sie wirklich vergessen.

Mit deinen Anpassungen geht es nun.

Gruss Renato

Hilfreich?
Kommentieren