Hallo,
hier ist mal wieder so eines der Probleme, die zu vorzeitigem Haarausfall führen können...
Meine App soll Daten verwenden, die im externen Speicher untergebracht werden (Download aus
dem Netz, Kopie aus dem assets-Ordner des Projekts, oder schlicht per USB-Kabel überspielte Files).
Dazu möchte ich zunächst im Download-Ordner des externen Speichers einen Ordner mit dem
Projektnamen erstellen (falls nicht vorhanden), dann eine README dorthin kopieren oder schreiben
(in der steht, weshalb dieser komische Ordner dort ist, was dort hin soll etc.).
Der Nutzer bekommt gleichzeitig die Meldung darüber, dass und welche Daten er noch benötigt,
und kann sie downloaden oder selbst überspielen.
Wenn ich hierzu in der onCreate folgendes mache
erhalte ich die beliebte EISDIR FileNotFoundException; file wird also für ein directory gehalten.
Völlig konfus macht mich die Angelegenheit aber dadurch, dass im Emulator die readme.txt in einen
vorhandenen myProject-Ordner geschrieben wird, während auf meinem Sony - auf dem der Ordner
erzeugt werden soll - die Fehlermeldung auftaucht und auch kein Ordner erzeugt wird.
Wenn ich am PC über USB-Kabel im Download-Ordner einen neuen Ordner erzeuge, funktioniert das;
allerdings kann ich diesen nicht umbenennen. Kopiere ich hingegen einen fertig benannten Ordner,
der Name übernommen. Die Nutzung der Dateien in diesem Download-Subordner funktioniert auch
einwandfrei.
Die uses-Permission WRITE_EXTERNAL_STORAGE ist gesetzt, daran liegt es also nicht.
Wie muss ich den Code ändern, damit tatsächlich ein Ordner erzeugt wird, und wie, damit ich
später ein neues File schreiben kann?
hier ist mal wieder so eines der Probleme, die zu vorzeitigem Haarausfall führen können...
Meine App soll Daten verwenden, die im externen Speicher untergebracht werden (Download aus
dem Netz, Kopie aus dem assets-Ordner des Projekts, oder schlicht per USB-Kabel überspielte Files).
Dazu möchte ich zunächst im Download-Ordner des externen Speichers einen Ordner mit dem
Projektnamen erstellen (falls nicht vorhanden), dann eine README dorthin kopieren oder schreiben
(in der steht, weshalb dieser komische Ordner dort ist, was dort hin soll etc.).
Der Nutzer bekommt gleichzeitig die Meldung darüber, dass und welche Daten er noch benötigt,
und kann sie downloaden oder selbst überspielen.
Wenn ich hierzu in der onCreate folgendes mache
Java:
File path = new File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/myProject/");
if ((path.mkdir()||path.isDirectory())){
File file = new File( path + "/readme.txt");
System.out.println("file "+file);
// liefert: file /storage/sdcard0/Download/myProject/readme.txt
System.out.println("isFILE "+file.isFile());
// liefert: isFILE false
try{
file.createNewFile();
FileOutputStream f1 = new FileOutputStream(file,false);
PrintStream p = new PrintStream(f1);
p.print("TODO");
p.close();
f1.close();
} catch (Exception e) { e.printStackTrace(); }
}
Völlig konfus macht mich die Angelegenheit aber dadurch, dass im Emulator die readme.txt in einen
vorhandenen myProject-Ordner geschrieben wird, während auf meinem Sony - auf dem der Ordner
erzeugt werden soll - die Fehlermeldung auftaucht und auch kein Ordner erzeugt wird.
Wenn ich am PC über USB-Kabel im Download-Ordner einen neuen Ordner erzeuge, funktioniert das;
allerdings kann ich diesen nicht umbenennen. Kopiere ich hingegen einen fertig benannten Ordner,
der Name übernommen. Die Nutzung der Dateien in diesem Download-Subordner funktioniert auch
einwandfrei.
Die uses-Permission WRITE_EXTERNAL_STORAGE ist gesetzt, daran liegt es also nicht.
Wie muss ich den Code ändern, damit tatsächlich ein Ordner erzeugt wird, und wie, damit ich
später ein neues File schreiben kann?