2010-09-15 8 views
3

J'essaie de télécharger un fichier depuis le réseau et de l'écrire sur la carte SD. J'ai l'autorisation WRITE_EXTERNAL_STORAGE activée. Le code échoue ici:FileNotFoundException + Écriture d'un fichier sur une carte SD

OutputStream output = new FileOutputStream(filePath); 

09-15 19:40:31.630: WARN/System.err(7933): java.io.FileNotFoundException: /sdcard/artoo/Customerv08.apk 
09-15 19:40:31.630: WARN/System.err(7933):  at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:231) 
09-15 19:40:31.630: WARN/System.err(7933):  at java.io.FileOutputStream.<init>(FileOutputStream.java:96) 
09-15 19:40:31.630: WARN/System.err(7933):  at java.io.FileOutputStream.<init>(FileOutputStream.java:169) 
09-15 19:40:31.630: WARN/System.err(7933):  at java.io.FileOutputStream.<init>(FileOutputStream.java:147) 
09-15 19:40:31.640: WARN/System.err(7933):  at com.artoo.settings.InstallerActivity$ProgressDialogAsyncTask.doInBackground(InstallerActivity.java:148) 
09-15 19:40:31.640: WARN/System.err(7933):  at com.artoo.settings.InstallerActivity$ProgressDialogAsyncTask.doInBackground(InstallerActivity.java:1) 
09-15 19:40:31.640: WARN/System.err(7933):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
09-15 19:40:31.640: WARN/System.err(7933):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:256) 
09-15 19:40:31.640: WARN/System.err(7933):  at java.util.concurrent.FutureTask.run(FutureTask.java:122) 
09-15 19:40:31.640: WARN/System.err(7933):  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:648) 
09-15 19:40:31.640: WARN/System.err(7933):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:673) 
09-15 19:40:31.651: WARN/System.err(7933):  at java.lang.Thread.run(Thread.java:1060) 
09-15 19:40:31.670: WARN/InputManagerService(53): Window already focused, ignoring focus gain of: [email protected] 

Je suis en train d'écrire le fichier et il n'existe pas d'avant. auriez vous des idées pour faire ça?

+0

est-ce que le répertoire artoo existe? –

+0

Avez-vous vérifié votre carte SD et le fichier (via l'explorateur de fichiers/navigateur)? Vous êtes sûr que le fichier n'est pas là? – WarrenFaith

+0

utilisez-vous 'Environment.getExternalStorageDirectory()' pour obtenir la racine du stockage externe? – CommonsWare

Répondre

8

Vous obtenez cette erreur car le fichier spécifié ne peut pas être ouvert ou n'existe pas. C'est simple comme ça.

Je crée toujours un fichier avant et d'utiliser un BufferedStream pour écrire, ex:

File file = new File(path, name); 
file.createNewFile(); 
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file), BUFFER); 
+0

De plus, j'ai aussi dû créer le chemin: file_path.mkdirs() –

+7

Le FileOutputStream est censé créer le fichier s'il n'existe pas. Bien sûr, il ne devrait pas créer de dossiers parents, mais le fichier devrait être créé: "Construit un nouveau FileOutputStream qui écrit dans path, le fichier sera tronqué s'il existe et créé s'il n'existe pas." http://developer.android.com/reference/java/io/FileOutputStream.html#FileOutputStream%28java.lang.String%29. Donc c'est un bug! – Snicolas

2

vérifier votre permission dans le fichier Manifest, type,

donner votre application l'autorisation WRITE_EXTERNAL_STORAGE

+0

Ceci est utile pour moi, j'oublie d'ajouter cette permission dans AndroidManifest.xml – wangzhengyi

Questions connexes