J'ai des problèmes avec l'écriture de fichiers sur la carte SD dans l'émulateur. Voici mon code:Enregistrement d'un fichier sur la carte SD
File directory;
directory = new File("/sdcard/b/b");
directory.mkdirs();
...
XmlSerializer serializer = Xml.newSerializer();
StringWriter writer = new StringWriter();
serializer.setOutput(writer);
...
String fileName = new Date().toString();
FileOutputStream fOut = healthCareApplication.openFileOutput("/sdcard/b/b"+fileName+".xml",Context.MODE_WORLD_READABLE);
OutputStreamWriter osw = new OutputStreamWriter(fOut);
osw.write(writer.toString());
osw.flush();
osw.close();
Tout d'abord je créer un répertoire sur la carte SD, à côté je construis un certain fichier XML. Ensuite, j'essaie de créer un fichier et d'essayer d'enregistrer ce fichier XML dans ce répertoire, mais je reçois IllegalArgumentException et les plantages d'applications. "healthCareApplication" est une classe qui étend la classe d'application. Quel est le problème avec ce code?
EDIT
Ok, ajouter "Environment.getExternalStorageDirectory() getAbsolutePath();". et voici ce que je reçois dans Logcat:
08-13 16:29:34.168: ERROR/AndroidRuntime(419): FATAL EXCEPTION: pool-1-thread-5
08-13 16:29:34.168: ERROR/AndroidRuntime(419): java.lang.IllegalArgumentException: File /mnt/sdcard/c/c/Sat Aug 13 16:29:34 GMT+00:00 2011.xml contains a path separator
08-13 16:29:34.168: ERROR/AndroidRuntime(419): at android.app.ContextImpl.makeFilename(ContextImpl.java:1648)
08-13 16:29:34.168: ERROR/AndroidRuntime(419): at android.app.ContextImpl.openFileOutput(ContextImpl.java:414)
08-13 16:29:34.168: ERROR/AndroidRuntime(419): at android.content.ContextWrapper.openFileOutput(ContextWrapper.java:158)
08-13 16:29:34.168: ERROR/AndroidRuntime(419): at com.myapp.runnable.ServerWorker.packageToXML(ServerWorker.java:197)
08-13 16:29:34.168: ERROR/AndroidRuntime(419): at com.myapp.runnable.ServerWorker.run(ServerWorker.java:85)
08-13 16:29:34.168: ERROR/AndroidRuntime(419): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
08-13 16:29:34.168: ERROR/AndroidRuntime(419): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
08-13 16:29:34.168: ERROR/AndroidRuntime(419): at java.lang.Thread.run(Thread.java:1019)
Quand je vérifier DDMS je vois que le dossier est créé dans sdcard mais dans ce répertoire est rien si probablement le problème est survenu lorsque l'application essaie d'écrire fichier à sdcard.
I également remplacer
"FileOutputStream fOut = healthCareApplication.openFileOutput("/sdcard/b/b"+fileName+".xml",Context.MODE_WORLD_READABLE);"
pour
File outputFile = new File(wallpaperDirectory, fileName);
FileOutputStream fos = new FileOutputStream(outputFile);
et obtenir une autre exception:
08-13 16:46:56.108: INFO/IOException(3110): /Sat Aug 13 16:46:56 GMT+00:00 2011 (Read-only file system)
Juste un conseil général: * jamais * hardcode le chemin de stockage comme la carte SD. Utilisez 'Environment.getExternalStorageDirectory()'. Certains appareils n'ont pas de carte SD et s'appuient sur une mémoire flash interne ou la montent entièrement ailleurs. –
En outre, '/ sdcard' est tout simplement faux pour la majorité des appareils Android utilisés aujourd'hui. Utilisez 'Environment.getExternalStorageDirectory()', et assurez-vous d'avoir l'autorisation 'WRITE_EXTERNAL_STORAGE'. Si cela ne vous aide pas, utilisez 'adb logcat', DDMS ou la perspective DDMS dans Eclipse pour examiner LogCat et voir où votre accident se produit. – CommonsWare
Publiez la sortie LogCat complète. –