2012-12-03 8 views
3

Essayez de créer un fichier dans un répertoire spécifique, mais il affiche l'erreur FileNotFound. Pourquoi? Est-ce que j'utilise un chemin impossible? Je ne sais vraiment pas, mais il semble que le code devrait fonctionner.Créer un fichier dans le répertoire spécifié

String day=/1; 
String zn="/zn"; 
    File_name=zn 
String root= Environment.getExternalStorageDirectory().toString();    
    File_path=root+day; 

     File file1 = new File(File_path,File_name); 
     file1.mkdirs(); 
     if(!file1.exists()) { 
      try { 
       file1.createNewFile(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 


     try { 
      OutputStream fos= new FileOutputStream(file1); 
      String l,d,p; 
      l = lessnum.getText().toString(); 
      d = desc.getText().toString(); 
      p = place.getText().toString(); 

      fos.write(l.getBytes()); 
      fos.write(d.getBytes()); 
      fos.write(p.getBytes()); 

      fos.close(); 

Répondre

1

Changer votre code comme pour créer un fichier sur la carte SD

String root= Environment.getExternalStorageDirectory().getAbsolutePath(); 
String File_name = "File_name.Any_file_Extension(like txt,png etc)"; 


File file1 = new File(root+ File.separator + File_name); 
if(!file1.exists()) { 
    try { 
     file1.createNewFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
} 

Au courant vous êtes al si le fichier manquant d'extension avec le nom de fichier pour ChangeString zn comme zn="/zn.txt";

et assurez-vous que vous avez ajouté l'autorisation de carte Sd AndroidManifest.xml:

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

oui et aussi ajouter le chemin du dossier avec elle si le dossier est déjà quitter –

+0

voir ma réponse modifier –

+0

si et si tout mon chemin est 2 strigs comme dirName = root + devrais-je mettre ici: File.separator + day; – CVS

0
String root= Environment.getExternalStorageDirectory().toString();  
    String dirName = 
     root+ "abc/123/xy"; 
     File newFile = new File(dirName); 
     newFile.mkdirs(); 

     String testFile = "test.txt"; 
     File file1 = new File(dirName,testFile); 
     if(!file1.exists()){ 
      try { 
       file1.createNewFile(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

Et et <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> sur fichier manifest ...

Merci ...

+0

File_path = root + File.separator + day; \t \t \t Fichier f_dir = nouveau Fichier (chemin_fichier); \t \t \t f_dir.mkdirs(); \t \t \t \t \t \t fichier fichier1 = new File (f_dir, File_name); \t \t \t si (! Fichier1.existe()) { \t \t \t \t try { \t \t \t \t \t file1.createNewFile(); \t \t \t \t} catch (IOException e) { \t \t \t \t \t e.printStackTrace(); \t \t \t \t} \t \t \t} \t \t \t \t \t \t \t \t \t try { \t \t \t \t OutputStream fos = new FileOutputStream (fichier1); \t \t \t \t Chaîne l, d, p; \t \t \t \t l = lessnum.getText(). ToString(); \t \t \t \t d = desc.getText(). ToString(); \t \t \t \t p = place.getText(). ToString(); \t \t \t \t \t \t \t \t fos.write (l.getBytes()); \t \t \t \t fos.write (d.getBytes()); \t \t \t \t fos.write (p.getBytes()); \t \t \t \t \t \t \t \t fos.close(); – CVS

+0

Terminé tout ne fonctionne toujours pas – CVS

+0

voulez-vous créer un fichier ou un dossier (répertoire) ??? – user4232

0

Voici votre dernière tentative:

File_path = root + File.separator + day; 
File f_dir = new File(File_path); 
f_dir.mkdirs(); 
File file1 = new File(f_dir, File_name); 
if (!file1.exists()) { 
    try { 
     file1.createNewFile(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
try { 
    OutputStream fos= new FileOutputStream(file1); 

Si vous nous avez montré la complète stacktrace et un message d'erreur, il serait plus facile de comprendre ce qui va mal, mais je ne peux penser à deux possibilités:

  1. Vous ne vérifie pas la valeur renvoyée par f_dir.mkdirs() et il se peut que le résultat false indique que le chemin de répertoire n'a pas été créé. Cela peut signifier que:
    • Le répertoire existait déjà.
    • Quelque chose existait mais ce n'était pas un répertoire.
    • Une partie du chemin du répertoire n'a pas pu être créée ... pour l'une des nombreuses raisons possibles.
  2. L'appel file1.exists() retournera true si quoi que ce soit existe avec ce chemin donné par l'objet. Le fait que quelque chose existe ne signifie pas nécessairement que vous pouvez l'ouvrir pour écrire:
    • Ce pourrait être un répertoire.
    • Il peut s'agir d'un fichier pour lequel l'application n'a pas les droits d'écriture.
    • Il peut s'agir d'un fichier sur un système de fichiers en lecture seule.
    • Et quelques autres choses.

Si j'écrivais cela, je l'écris quelque chose comme ceci:

File dir = new File(new File(root), day); 
if (!dir.exists()) { 
    if (!dir.mkdirs()) { 
     System.err.println("Cannot create directories"); 
     return; 
    } 
} 
File file1 = new File(dir, fileName); 
try (OutputStream fos= new FileOutputStream(file1)) { 
    ... 
} catch (FileNotFoundException ex) { 
    System.err.println("Cannot open file: " + ex.getMessage()); 
} 

Je ne tente de créer le répertoire si nécessaire ... et vérifiez que les la création a réussi. Ensuite, je tente simplement d'ouvrir le fichier pour y écrire. Si le fichier n'existe pas, il sera créé. S'il ne peut pas être créé, le message FileNotFoundException doit expliquer pourquoi.

Notez que j'ai également corrigé les erreurs de style que vous avez faites dans votre choix de noms de variables.

+0

Okey je vais essayer plus tard, mais de toute façon merci – CVS

1

D'abord, vous créez un répertoire

String root= Environment.getExternalStorageDirectory().toString();  
String dirName = 
    root+ "abc/123/xy"; 
    File newFile = new File(dirName); 
    newFile.mkdirs(); 

vous créez un fichier dans ce répertoire

String testFile = "test.txt"; File file1 = new File(dirName,testFile); if(!file1.exists()){ try { file1.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

puis effectuez vos opérations d'écriture de fichiers

try { OutputStream fos= new FileOutputStream(file1); 

Chaîne l, d , p; l = lessnum.getText(). ToString(); d = desc.getText(). ToString(); p = place.getText(). ToString(); os.write (l.getBytes()); fos.write (d.getBytes()); fos.write (p.getBytes()); fos.close(); } catch (Exception e) { // TODO Bloc de saisie généré automatiquement e.printStackTrace(); }

Je pense que cela vous aidera ...

Merci ...

Questions connexes