2012-11-15 7 views
0

J'écris un fichier de téléchargement dans le programme de la carte SD. Mais je ne sais pas pourquoi créer le fichier a échoué. LogCat imprimer les informations comme ceci:Créer un fichier dans la carte SD a échoué

11-15 01:22:14.369: I/System.out(385): /mnt/sdcard/ 
11-15 01:22:16.413: I/System.out(385): file------->/mnt/sdcard/test/1.mp3 
11-15 01:22:16.419: I/System.out(385): createSDFile 

Il attrape l'erreur:

11-15 00:21:29.248: W/dalvikvm(352): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
11-15 00:21:29.259: E/AndroidRuntime(352): FATAL EXCEPTION: main 
11-15 00:21:29.259: E/AndroidRuntime(352): java.lang.NullPointerException 
11-15 00:21:29.259: E/AndroidRuntime(352): at java.io.FileOutputStream.<init>(FileOutputStream.java:97) 
11-15 00:21:29.259: E/AndroidRuntime(352): at java.io.FileOutputStream.<init>(FileOutputStream.java:69) 
11-15 00:21:29.259: E/AndroidRuntime(352): at com.example.Utils.FileUtils.write2SDFromInputStream(FileUtils.java:60) 
11-15 00:21:29.259: E/AndroidRuntime(352): at com.example.Utils.HttpDownload.downloadFile(HttpDownload.java:70) 

En raison de l'info, le fichier a été créé correctement. J'utilise fileExplorer check/mnt/sdcard /, et ne trouve pas d'erreur. Y a-t-il un problème avec '/' dans le chemin? autorité connexions réseau:

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

l'autorité de créer ou de supprimer le fichier dans sdcard

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

méthode de téléchargement d'appel: hdl.downloadFile("http://169.254.57.236/test/1.mp3","test/","1.mp3");

classe téléchargement du fichier

package com.example.Utils; 


import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 


import android.os.Environment; 
import android.util.Log; 


public class FileUtils { 
private String SDPATH; 


public FileUtils(){ 
SDPATH = Environment.getExternalStorageDirectory()+"/"; 
} 

//create directory on SD card 
public File createSDDir(String dirName){ 
File dir = new File(SDPATH+dirName); 
dir.mkdirs(); 
return dir; 
} 

//cteate file on SD card: 
public File createSDFile(String dirAndFilename) throws IOException{ 
File file = new File(SDPATH+dirAndFilename); 
file.createNewFile(); 
return file; 
} 

//check the file in SD card is exited or not 
public boolean isFileExist(String fileName){ 
File file = new File(SDPATH + fileName); 
return file.exists(); 
} 


//put InputStream data into SD card 
public File write2SDFromInputStream(String path,String fileName,InputStream in){ 
File file = null; 
OutputStream out = null; 

try { 
createSDDir(path); 
try{ 
file = createSDFile(path+fileName); 
} 

catch(Exception e){ 
System.out.println("createSDFile failed"); 
} 

out = new FileOutputStream(file); 
byte buf[] = new byte[1024*5]; 
int ch = 0; 
while((ch = in.read(buf))!=-1){ 
out.write(buf); 
out.flush(); 
} 

} catch (IOException e) { 

System.out.println("SD write failed!"); 
e.printStackTrace(); 
}finally{ 

if(out!=null) 
try { 
out.close(); 
} catch (IOException e) { 
e.printStackTrace(); 
System.out.println("SD Write inflow closed failure!"); 
} 
} 

return file; 
} 


} 
+3

S'il vous plaît afficher le code à défaut aussi. – Frank

+0

s'il vous plaît signaler le code de FileUtils.java? –

+0

Assurez-vous que votre dossier "test" est également créé. Sans votre code, il suffit de deviner. – Thommy

Répondre

2

Vérifiez si vous ajouter une autorisation manifeste

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

Sans le code, c'est presque impossible. Mais avez-vous créé le fichier?

File f; 
f=new File(Environment.getExternalStorageDirectory() + "/whatever_dic"); 
f.createFile(); 
1

essayez d'utiliser mkdirs()

  File sdCardDirectory = Environment 
        .getExternalStorageDirectory(); 
      new File(sdCardDirectory + "/XXX/Wallpapers/").mkdirs(); 
      File image = new File(sdCardDirectory 
        + "/XXX/Wallpapers/Sample" + numberOfImages + ".JPG"); 

et utiliser la permission dans votre manifeste

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