2015-08-06 6 views
0

Je veux stocker les fichiers .docx générés et modifiés via une application Android dans le stockage interne des téléphones Android (tous le même modèle de téléphone si cela aide). J'ai le chargement du modèle (situé dans l'application) et la modification des champs de travail, mais je suis bloqué sur la façon de sauvegarder les fichiers.Comment accéder au stockage interne dans Android

J'utilise docx4j qui a une méthode d'enregistrement:

private void writeDocxToStream(WordprocessingMLPackage template, 
     String target) throws IOException, Docx4JException { 
      File f = new File(target); 
      template.save(f); 
} 

J'ai essayé des moyens plus « manuels », mais je l'ai toujours le même problème:

ce qui devrait être l'entrée pour le répertoire cible?

Il semble facile de le faire pour le stockage externe, mais concernant le stockage interne c'est autre chose.

Lorsque je tente simplement de sortie d'une chaîne dans un test.txt puis obtenir la chaîne en revenir, avec le BufferedReader classique, InputStreamReader, façon FileInputStream de faire, je ne peux pas obtenir cette information que ce soit.

Les informations sur ce sujet sont super dispersées, j'ai passé l'après-midi à lire des milliers de façons de réaliser le stockage, mais aucune ne correspond à mon problème.

J'ai défini <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> dans mon manifeste pour être sûr mais cela ne change rien. En outre, et peut-être qu'il a à voir avec le problème, je ne peux pas accéder aux fichiers (de l'appareil ou de l'ordinateur) sur mon appareil de test (un Samsung Galaxy 5S qui peut exécuter l'application), je semble avoir tous les dossiers mais pas les fichiers, à part quelques fichiers xml et txt ... (Cependant, je n'ai toujours rien quand: write dans EditText - stocker dans File - enregistrer File in .txt - récupérer String - voir String dans textView).

Ceci est super important car je dois récupérer les fichiers .docx pour une utilisation ultérieure, après leur création.

Merci pour vos réponses et laissez-moi savoir si je peux fournir plus d'informations, je sais que mon problème est assez flou.

+0

'target' devrait être un chemin dans la mémoire interne de votre application. Quel est votre code pour appeler 'writeDocxToStream'? – alijandro

+0

'writeDocxToStream (wordMLPackage, (context.getDir (" testfile ", Contexte.MODE_WORLD_READABLE)). GetPath(). ToString() +"/test.docx ");' est mon code –

Répondre

0

Il semble facile de le faire pour le stockage externe, mais en ce qui concerne le stockage interne, c'est autre chose.

Pour écrire à external storage, utilisez le constructeur à deux paramètres File, où vous fournissez un objet File pointant vers un emplacement racine sur le stockage externe, par exemple:

new File(getExternalFilesDir(null), target); 

Pour écrire à internal storage, vous utilisez le constructeur File à deux paramètres, où vous fournissez un objet File pointant vers un emplacement racine sur le stockage interne, tel que:

new File(getFilesDir(), target); 
0

Vous n'êtes pas obligé de détenir l'autorisation android.permission.WRITE_EXTERNAL_STORAGE si vous écrivez votre fichier sur le stockage interne privé de l'application.

Dans votre code, avec l'appel

context.getDir("testfile", Context.MODE_WORLD_READABLE)).getPath().toString()+"/test.docx"; 

le fichier écrire sur le chemin

/data/data/com.yourpackage.name/app_testfile/test.docx 

Si l'écriture fonctionne avec succès, vous pouvez lire et récupérer le contenu du fichier à l'aide le chemin ci-dessus.