2017-10-14 5 views
0

J'ai une application et je veux créer un fichier texte et y écrire quelque chose. J'utilise l'intention explicite pour sélectionner le dossier et créer un fichier, où mimeType = text/plainÉcrire une chaîne dans un fichier .txt, FileOutputStream ne fonctionne pas comme prévu

private void createFile(String mimeType, String fileName) { 
    Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT); 
    intent.addCategory(Intent.CATEGORY_OPENABLE); 
    intent.setType(mimeType); 
    intent.putExtra(Intent.EXTRA_TITLE, fileName); 
    startActivityForResult(intent, WRITE_REQUEST_CODE); 
} 

après avoir créé le fichier que j'utilise onActivityResult pour y écrire

if (requestCode == WRITE_REQUEST_CODE && resultCode == Activity.RESULT_OK) { 
     Uri uri = resultData.getData(); 
     String path = uri.getPath(); 
     File file = new File(path); 
     String filename = file.getName(); 
     try { 
      verifyStoragePermissions(this); //method to access storage 
      FileOutputStream outputStream = openFileOutput(filename,MODE_PRIVATE); 
      outputStream.write("Message to write".getBytes()); 
      outputStream.flush(); 
      outputStream.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

J'ai aussi permitions dans mon manifeste

Je n'obtiens pas d'erreur mais il n'y a rien d'écrit dans mon fichier.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

Quelqu'un peut-il aider?

Répondre

1
  1. ACTION_CREATE_DOCUMENT vous donne un Uri à utiliser pour écrire du contenu à. Un Uri n'est pas un fichier.

  2. openFileOutput() est pour le stockage interne, pas de stockage externe, et donc les autorisations sont inutiles

  3. openFileOutput() n'a rien à voir avec ACTION_CREATE_DOCUMENT

  4. Ne pas écrire les chaînes via getBytes()

Tactiquement, remplacez votre deuxième bloc de code par ceci:

if (requestCode == WRITE_REQUEST_CODE && resultCode == Activity.RESULT_OK) { 
    Uri uri = resultData.getData(); 

    try { 
     OutputStream os=getContentResolver().openOutputStream(uri); 
     PrintStream ps=new PrintStream(os); 
     ps.print("Message to write"); 
     ps.flush(); 
     ps.close(); 
    } catch (Exception e) { 
     Log.e("Some identifying string", "Exception writing to "+uri.toString(), e); 
    } 
} 
+0

Que dois-je changer pour sauvegarder ceci en tant que fichier .xml? J'ai déjà changé mimeType mais ne fonctionne pas –

+0

@IoannaDln: Je ne sais pas ce que vous voulez dire par "enregistrer ceci en tant que fichier .xml", désolé. Si vous demandez comment demander à l'utilisateur un emplacement pour un fichier XML, je m'attendrais à ce qu'un type MIME de 'text/xml' aide, bien qu'il n'y ait aucune exigence pour l'utilisateur de coller avec une extension de fichier particulière. – CommonsWare

+0

au lieu de créer un fichier .txt Je veux créer un fichier .xml mais je reçois des fichiers vides sans données écrites –