---> Introduction
---> Gestion des fichiers
---> Forme de stockage des fichiers
---> Types de fichiers
---> Saisir un fichier
---> Opérations sur les fichiers
---> Conclusion
Introduction :
Nous avons vu dans des tutoriels précédents ce qu’il faut savoir pour commencer à coder avec Libgdx sous
Android tout en effectuant les processus
de test et de débogage sur le desktop, ce qui va nous épargner l’utilisation de
l’émulateur.
Maintenant que vous savez créer un projet
Android/desktop on va commencer à coder.
Gestion des fichiers :
Comme je l’ai dit et comme vous le savez
et je le redirais (parce que c’est trop génial !) : Libgdx fonctionne
sur plusieurs plateformes ! Et ce qui nous intéresse ici, c’est de
programmer sur Android tout en effectuant le test et le débogage sur le
desktop.
Libgdx est décomposé en cinq modules et l’un de ces modules est responsable
de la gestion des fichiers.
Le module « File » de gestion
de fichier fournit un ensemble de méthode qui permettent la manipulation des
fichiers .Il prend en charge les taches suivantes :
- La lecture d'un fichier
- L’écriture dans un fichier
- Copier un fichier
- Déplacer un fichier
- Lister les fichiers et les répertoires
Forme de Stockage des fichiers :
On va commencer par une illustration de
la manière avec laquelle les fichiers peuvent être stockés sous desktop puis
sous Android :
1)Sous desktop : Les choses sont
simples les fichiers peuvent être référencés avec un chemins relative ou avec
un chemin absolus.
2)Sous Android : La situation est un
peu plus complexe : les fichiers peuvent être stockés dans l’application
comme étant des fichiers de ressources et qui doivent obligatoirement se situer
dans le fichier assets du projet Android.
Il y aussi le stockage interne, chaque
application installée possède son propre répertoire de stockage interne et qui
est uniquement accessible par l’application elle-même.
Et sans oublier le stockage externe,
telle que la carte SD. Sachant que la carte SD peut ne pas être disponible (le
cas où on la retire) donc, les fichiers stockés en interne sont considérés
comme étant volatile.
Les types de fichier :
ClassPath :
Les fichiers classpath sont stockés dans
le fichier source de votre projet là où les fichiers JAR et les classes
compilées sont situées. Ces fichiers
sont toujours en lecture seule.
Remarque : Ce genre de fichier est à éviter dès que possibles.
Interne :
* Sous Desktop : Les fichiers internes
sont relatifs à l’espace de travail du projet Desktop,
* Sous Android : Les fichiers internes
sont relatifs au fichier assets du projet Android.
Ces fichiers
sont en lecture
seule.
Remarque : J’ai
recommandé dans le tutoriel intitulé tout ce qu'il faut savoir pour commencer avec Libgdx de créer un fichier assets
dans le projet desktops et de le lié comme étant une source de fichier interne
pour qu’il devient similaire au assets de Android
En vérité,
ce n’est pas nécessaire de créer un autre fichier assets dans le projet
desktop car vous pouvez lier le fichier assets
de Android, et n’avoir qu’un seul fichier assets pour les deux projets
Android et Desktop.
Externe :
* Sous Android : Les fichiers externes sont
les fichiers situés dans le répertoire racine de la carte mémoire SD.
* Sous desktop : Les fichiers externes
sont les fichiers situés dans le répertoire Home de l’utilisateur.
Ces fichiers sont en Lecture/Ecriture.
Absolu
Ce sont les fichiers que pour que l’on
accède, on doit spécifier le chemin d’accès complet.
Remarque: pour des raisons de
portabilité, cette option ne doit être utilisée uniquement que lorsque c’est
nécessaire.
Local
* Sous Android : Les fichiers locaux
sont les fichiers situés dans le répertoire racine du jeu/app cdans un dossier
privé, cette option a été ajouter récemment et parmi ses avantages c’est que cces fichiers sont privés pour l’application i.e. si l’application est supprimé
ils le seront aussi.
* Sous desktop : les fichiers locaux
sont les fichiers situés dans le répertoire de travail du projet cou dans le
répertoire racine du jeu/app. Sous desktop, interne et local signifie la même chose.
Les fichiers externes sont en Lecture/Ecriture.
Récapitulant les différents types de
fichiers selon le module File :
Type de fichier
|
Permission de
|
Android
|
Desktop
|
Classpath
|
Lecture seule
|
oui
|
Oui
|
Interne
|
Lecture seule
|
oui
|
Oui
|
Externe
|
Lecture/Ecriture
|
oui
|
Oui
|
Absolu
|
Lecture/Ecriture
|
oui
|
Oui
|
Local
|
Lecture/Ecriture
|
oui
|
Oui
|
Saisir un fichier
C’est grâce à la classe FileHande qu’on peut
obtenir et gérer les fichiers, La classe FileHandle du package com.badlogic.gdx.files est indépendante des types de
fichier.
FileHandle doit être instancié dans le cas où on veut charger des
fichiers textes ou des fichiers binaires tels que : une image via la
classe Texture ou un son via la classe Sound.
Les codes suivant montrent comment obtenir la manipulation d’un
fichier :
Fichier interne
FileHandle fichier
= Gdx.files.internal("data/fichier.txt");
* Sous desktop : Le répertoire data/ est dans la racine du projet la
ou les classes sont situées.
cMais comme nous avons créé notre propre fichier assets pour
le projet desktop, il est préférable de le mettre là-dedans.
* Sous Android : Le répertoire date/ doit être dans assets
Fichier Classpath
FileHandle fichier
= Gdx.files.classpath("fichier.txt");
Le
"fichier.txt" fichier se trouve dans le répertoire du projet qui
contient les classes compilées et les fichiers JARs inclus.
Fichier externe :
FileHandle fichier = Gdx.files.external("fichier.txt");
Pour récupérer le fichier fichier.txt :
* Sous desktop : Il doit être dans le
dans le répertoire /home/<user>/ sous Linux ou dans le c répertoire
/Users/<user> sous Windows.
Remarque : Pour récupérer le répertoire
Home de votre utilisateur
System.getProperty(
"user.home"
));
* Sous Android : Il doit être dans le
répertoire racine de la carte SD.
Fichier Absolu :
FileHandle handle
= Gdx.files.absolute("/rep1/rep2/rep3/fichier.txt");
Pour récupérer le fichier ficheir.txt, il
doit être exactement dans le répertoire indiqué la haut i.e. dans /rep1/rep2/rep3/
Opérations sur les fichiers
Comme je l’ai mentionné un peu plus haut
FileHandle nous fournit plusieurs méthodes qui permettent la manipulation des
fichiers.
Exemple : vérifier qu’un fichier stocké en externe existe ou non i.e.
si la carte SD est-elle insérée ou pas :
boolean existe ;
existe=Gdx.files.external("fichier.txt").exists();
Exemple : vérifie si un fichier stocké en externe est-il un répertoire ou non :
boolean estUnRepertoire ;
estUnRepertoire =
Gdx.files.external("test/").isDirectory();
Exemple : Lister le contenu d’un répertoire stocké en local :
int i =1;
FileHandle[] fichiers = Gdx.files.local("repertoireLocal/").list();
for(FileHandle file: files) {
System.out.println("Le repertoire
n°"+i+"
"+file.name());
i++;
}
List() renvoi un tableau de FileHandle
qui contient les fichiers et les répertoires qui se trouvent juste en dessus.
Exemple : demander le répertoire parent d’un fichier ou d’un répertoire :
FileHandle fichier = Gdx.files.local("D:/Amine/Hamid/").parent();
System.out.print("Le repertoire :"+fichier.name());
Ici le résultat affiché est évidemment
« Amine ».
Exemple : Créer un FileHandle pour un fichier situant dans l’un des
répertoires fils du répertoire se situant en interne :
FileHandle fichier = Gdx.files.internal("/data/image/").child("image.png");
System.out.print("Le repertoire :"+fichier.name());
Child() prend en paramètre le nom de
fichier que l’on veut obtenir.
Il y a plein d’autre méthodes pour plus
de détails veillez se référencer à la documentation javadocs.
Je vous ai montré toutes les types de
fichier, mais d'aurai en avant on s’intéressera que sur les fichiers stockés en
interne parce que c’est facile de savoir s’ils existent ou pas, il suffit de
visualiser le contenu du fichier assets
Lire et Ecrire dans un fichier :
Lire d'un fichier : c’est très simple.
Exemple : récupérer le contenu d’un fichier dans une chaine de
caractère.
FileHandle fichier = Gdx.files.internal("fichier.txt");
String texte = fichier.readString();
Exemple : récupérer le contenu d’un fichier en binaire
FileHandle fichier = Gdx.files.internal("fichier.bin");
byte[] bytes = fichier.readBytes();
Sachez qu’il y a plein
d’autres méthodes qui traitent la lecture d’un fichier pour plus de
renseignement consultez la javadocs.
Ecrire dans un fichier :
c’est aussi simple que la lecture mais il faut prendre en considération le type
de fichier car comme on l’a déjà dit seuls les fichiers stockés en externe, en
local et en absolu tolèrent l’écriture.
Exemple : écrire une chaine de caractère dans un fichier
FileHandle fichier = Gdx.files.local("fichier.txt");
fichier.writeString("blab la blab", false);
Exemple : écrire des données binaires
FileHandle fichier = Gdx.files.local("fichier.bin");
fichier.writeBytes(new byte[] { 0, 1, 01, 10 }, false);
Sachez qu’il y a plein d’autres méthodes
qui traitent l’écriture des données dans un fichier pour plus de détails
consultez javadocs.
Copier, supprimer, renommer, déplacer des fichiers
Ces opérations sont possibles que pour
les types de fichier qui tolèrent l’écriture :
Exemple : supprimer un fichier ou un répertoire
Gdx.files.local("fichierLocal.txt").delete();
Exemple : Renommer un fichier
Gdx.files.external("fichierExterne1.txt").rename("fichierExterne2.txt");
Exemple : déplacer un fichier
Gdx.files.external("mycopy.txt").moveTo(Gdx.files.local("mylocalcopy.txt"));
Exemple : Copier un fichier
FileHandle fichierSource =
Gdx.files.internal("fichierExterne.txt");
fichierSource.copyTo(Gdx.files.external("laCopyExterne.txt");
Conclusion
Dans ce tutoriel, nous avons vu l’utilisation
des fichiers à travers les deux plateformes ce qui va nous être très utile dans
les prochains chapitres. Si vous avez des remarques ou des questions n’hésitez
pas à les poster en commentaire. Merci pour votre lecture.
Merci pour ces super tuto ;) !!
RépondreSupprimerContinue comme ça :)
Merci
RépondreSupprimersous android , l'ecriture de fichier locaux ne marche pas !
RépondreSupprimermerci pour ces informations c'est vraiment tres important
RépondreSupprimer