Enregistrer un fichier sur une tablette Android

Résolu
amal0elmimouni Messages postés 3 Date d'inscription mercredi 27 juin 2012 Statut Membre Dernière intervention 18 juillet 2012 - 12 juil. 2012 à 16:20
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 18 juil. 2012 à 21:53
Bonjour,

je développe une application android. j'ai une communication entre mon application (client) et un erveur web. j'utilise les servlet pour gérer cette communication. le serveur web doit générer un fichier xml et l'enregistrer sur ma tablette.

là j'ai réussi à créer le fichier xml et l'enregistrer sur le disque dur de mon pc.

try
{
DocumentBuilderFactory builderFactory = 	DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = builderFactory.newDocumentBuilder();
//creating a new instance of a DOM to build a DOM tree.
Document doc = docBuilder.newDocument();
new AuthentificationServlet().createXml(doc);
out.println("  fichier xml enregistre  ");
}
catch(Exception e)
{
System.out.println(e);
}					
 
private void createXml(Document doc) throws TransformerException, IOException {
//creer un noeud
Element root  = doc.createElement("configuration");
//ajouter un noeud après le dernier fils noeud
doc.appendChild(root);
 
Element child =  doc.createElement("matricule");
root.appendChild(child);
 
Text text = doc.createTextNode("1234");
child.appendChild(text);
 
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
 
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
 
//creer string from xml tree
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
transformer.transform(source, result);
String xmlString = sw.toString();
 
 
File file = new File("c:/newxml.xml");
BufferedWriter  bw = new BufferedWriter (new OutputStreamWriter(new FileOutputStream(file)));
bw.write(xmlString);
bw.flush();
bw.close();	
}


Mais il me reste de l'enregistrer sur le disque dur de ma tablette.
je ne sais pas qu'est ce que je dois donner comme chemin à mon FileOutputStream pour qu'il enregistre ce fichier sur le disque dur de mon media Android

quelqu'un peut m'aider svp

merci bcp

5 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 juil. 2012 à 10:30
Salut,

dans un premiers temps il faut que tu ajoutes les permissions :

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
  	
  
    ...
  
</manifest>


Ensuite tu peux utiliser le fichier comme un fichier classique (il faudra surement que tu utilises le chemin absolue ; avec l’émulateur tu risques d'avoir des erreurs mais si tu utilises ta tablette/téléphone en mode debug ça devrais passer (puis c'est plus fluide pour les tests)).

Au passage si tu veux stocker sur une SD, tu peux également t'aider de l'objet android.os.Environment:
// test si la partoche est montée et si elle est en lecture seule:
String state = Environment.getExternalStorageState();
if (!Environment.MEDIA_MOUNTED.equals(state))
  Log.d(TAG, "ARG non montée :)");
if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state))
  Log.d(TAG, "ARG lecture seule!");





-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 juil. 2012 à 10:36
Re,

Pour ce qui est du chemin à utiliser ... seule toi le sait... la seule chose que je peux te dire c'est qu'il ne s'agit pas un système de fichiers à la MS donc pas de C:, etc...
il faut que tu te bases sur le fonctionnement des systèmes de fichiers unix '/' étant la racine.
Exemple chez moi la SD interne est sur /mnt/sdcard et l'externe sur /mnt/sdcard-ext.
Sauf si le système est root tu ne peux pas écrire où tu veux (exemple pas dans '/')


-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
amal0elmimouni Messages postés 3 Date d'inscription mercredi 27 juin 2012 Statut Membre Dernière intervention 18 juillet 2012
18 juil. 2012 à 08:36
Merci bcp pour ta réponse.

je vais essayer ça
0
amal0elmimouni Messages postés 3 Date d'inscription mercredi 27 juin 2012 Statut Membre Dernière intervention 18 juillet 2012
18 juil. 2012 à 14:50
J'ai trouvé que ce chemin comme numéro d'identification de l'instance de périphérique

USB\VID_0B05&PID_4E1F&MI_01\6&BB5DC1A&0&0001

Mais quand j'ai essayé ça n'a pas marché.

Stp est ce que tu peux me dire ou je peux avoir le chemin que tu m'as indiqué

Merci bcp
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
18 juil. 2012 à 21:53
Salut,

Tu as potassé la doc de la class android.os.Environement ? ...visiblement non...

Avec le code suivant:
File data = Environment.getDataDirectory();
File dlCache = Environment.getDownloadCacheDirectory();
File extSdCard = Environment.getExternalStorageDirectory();
File root = Environment.getRootDirectory();
/* La doc donne un code d'exemple pour construire ta classe File et l'exploiter */
File alarm = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS);
File dcim = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
File downloads = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File movies = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES);
File music = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
File notifications = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_NOTIFICATIONS);
File pictures = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File podcasts = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PODCASTS);
File ringtones = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES);
Log.e("TAG", "data:" + data.getAbsolutePath());
Log.e("TAG", "dlCache:" + dlCache.getAbsolutePath());
Log.e("TAG", "extSdCard:" + extSdCard.getAbsolutePath());
Log.e("TAG", "root:" + root.getAbsolutePath());
Log.e("TAG", "alarm:" + alarm.getAbsolutePath());
Log.e("TAG", "dcim:" + dcim.getAbsolutePath());
Log.e("TAG", "downloads:" + downloads.getAbsolutePath());
Log.e("TAG", "movies:" + movies.getAbsolutePath());
Log.e("TAG", "music:" + music.getAbsolutePath());
Log.e("TAG", "notifications:" + notifications.getAbsolutePath());
Log.e("TAG", "pictures:" + pictures.getAbsolutePath());
Log.e("TAG", "podcasts:" + podcasts.getAbsolutePath());
Log.e("TAG", "ringtones:" + ringtones.getAbsolutePath());


J'obtiens ceci sur un smartphone Motorola RAZR XT910 + android 4.0.4 ainsi que sur une tablette ASUS Transformer TF101 + android 4.0.3

data:/data
dlCache:/cache
extSdCard:/mnt/sdcard
root:/system
alarm:/mnt/sdcard/Alarms
dcim:/mnt/sdcard/DCIM
downloads:/mnt/sdcard/Download
movies:/mnt/sdcard/Movies
music:/mnt/sdcard/Music
notifications:/mnt/sdcard/Notifications
pictures:/mnt/sdcard/Pictures
podcasts:/mnt/sdcard/Podcasts
ringtones:/mnt/sdcard/Ringtones



-----

"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
Rejoignez-nous