2010-12-01 11 views
1

Ich versuche, eine Datei auf meiner SD-Karte in meinem HTC Hero-Handy zu schreiben. Ich erstelle die Datei in meiner SD-Karte mit:Schreiben auf SDCard Problem - Android

Datei = neue Datei (path.getAbsolutePath(), "Dateiname.txt");

wobei Pfad der Pfad zu meiner externalStorageDirectory (dh \ sdcard)

Wenn ich den Pfad dieser Datei einzuloggen, hat \ it sagen sdcard \ filename.txt

Allerdings, wenn ich einen Outputstream erstellen Um in die Datei zu schreiben, wird plötzlich der Dateipfad in \ data \ data geändert und ich kann nicht darauf zugreifen.

Kann jemand bitte helfen zu klären, wie ich eine Datei in der SDCard erstellen und dann darauf schreiben kann?

Danke!

Edit:

path = Environment.getExternalStorageDirectory(); 
Log.d("SDCARDPLSWORK", path.toString()); 
    try 
    { 
     myFile = new File(path.getAbsolutePath(), "SensorValues.txt"); 
     boolean i = myFile.createNewFile(); 
     Log.d("SDCARDPLSWORK", myFile.toString() + " " + i); 
     fos = new FileOutputStream(myFile); 
     Log.d("FILEANDROID", getFileStreamPath("SensorValues.txt").toString()); 
    } 

    catch(FileNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 

Dies ist, was ich tue. Der Teil bis SDCARDPLSWORK ist korrekt, aber wenn es um das FILEANDROID-Protokoll geht, geht es zum privaten Datenspeicher.

Antwort

0

getFileStreamPath(..) liest aus dem lokalen Verzeichnis. Dein Debug-Code ist falsch.

+0

Ohh ... ich dachte, getFileStreamPath bekommt nur den Pfad einer Datei .. es funktioniert jetzt .. vielen Dank! :) – Imelza

0

Verwenden Sie Environment.getExternalStorageDirectory() für SD-Kartenpfad.

Environment.getExternalStorageDirectory()+"/yourFilename.png" 
+0

path = Environment.getExternalStorageDirectory(); Log.d ("SDCARDPLSWORK", Pfad.zuString()); versuchen { \t myFile = neue Datei (path.getAbsolutePath(), "SensorValues.txt"); \t Boolesch i = myFile.createNewFile(); \t Log.d ("SDCARDPLSWORK", myFile.toString() + "" + i); \t fos = neuer FileOutputStream (myFile); \t Log.d ("FILEANDROID", myFile.getAbsolutePath()); } catch (FileNotFoundException e) { \t e.printStackTrace(); – Imelza

+0

Entschuldigung das ist, was ich tue, denke ich, aber es funktioniert nicht. – Imelza

+0

Ich würde lieber Environment.getExternalStorageDirectory() + File.pathSeparator + "yourFilename.png" oder endgültige Datei Datei = neue Datei (Environment.getExternalStorageDirectory(), "yourFilename.png"); –

0

Environment.getExternalStorageDirectory() wird den Stammordner von SD-Karte erhalten.

@JAVADOC

Anwendungen verschmutzen des Benutzers root Namensraum nicht direkt sollte dieses Top-Level-Verzeichnis, um vermeiden verwenden. Alle Dateien, die privat für die Anwendung sind, sollten in ein Verzeichnis von Context.getExternalFilesDir zurückgegeben werden, die das -System kümmert sich um Löschen, wenn die Anwendung deinstalliert wird. Andere freigegebene Dateien sollten in einem der Verzeichnisse von getExternalStoragePublicDirectory (String) zurückgegeben werden.

/data/data/... dieser Standort verwendet wird, um Dateien für Ihr Paket zu speichern, so versuchen die Codes unter:

File path = getApplicationContext().getFilesDir(); // get your private folder 
Log.d("SDCARDPLSWORK", path.toString()); 
File myFile; 
FileOutputStream fos; 
try { 
    myFile = new File(path.getAbsolutePath(), 
      "SensorValues.txt"); 
    boolean i = myFile.createNewFile(); 
    Log.d("SDCARDPLSWORK", myFile.toString() + " " + i); 
    fos = new FileOutputStream(myFile); 
    Log.d("FILEANDROID", getFileStreamPath("SensorValues.txt") 
      .toString()); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
}