Você está na página 1de 6

TP2 SAIDI Jamel Eddine

Manipulationdesfichiers
Ilyadeuxmaniresd'utiliserlesfichiers:soitsurlammoireinternedupriphriqueunendroitbien
spcifique,soitsurunemmoireexterne(parexempleunecarteSD).Danstouslescas,onparttoujours
du Context pourmanipulerdesfichiers.

Rappelssurl'critureetlalecturedefichiers

Cen'estpasunsujetforcmentvidentenJavapuisqu'ilexistebeaucoupdemthodesquipermettent
d'crireetdeliredesfichiersenfonctiondelasituation.
Lecasleplussimpleestdemanipulerdesfluxd'octets,cequincessitedesobjetsde
type FileInputStream pourlireunfichieret FileOutputStream pourcriredansunfichier.Lalecture
s'effectueaveclamthode intread() etoncritdansunfichieravec voidwrite(byte[]b) .Voiciun
programmetrssimplequilitdansunfichierpuiscritdansunautrefichier:
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;

publicclassCopyBytes{
publicstaticvoidmain(String[]args)throwsIOException{

FileInputStreamin=null;
FileOutputStreamout=null;

try{
in=newFileInputStream("entree.txt");
out=newFileOutputStream("sortie.txt");
intoctet;

//Lamthodereadrenvoie1dsqu'iln'yaplusrienlire
while((octet=in.read())!=1){
out.write(octet);
}
if(in!=null)
in.close();

if(out!=null)
out.close();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
}

Eninterne

L'avantageiciestquelaprsencedesfichiersdpenddelaprsencedel'application.Parconsquent,les
fichiersserontsupprimssil'utilisateurdsinstallel'activit.Enrevanche,commelammoireinternedu

1
TP2 SAIDI Jamel Eddine

tlphonerisqued'trelimite,onviteengnraldeplacerlesplusgrosfichiersdecettemanire.
Afindercuprerun FileOutputStream quipointeraverslebonrpertoire,ilsuffitd'utiliserla
mthode FileOutputStreamopenFileOutput(Stringname,intmode) avec name lenomdufichier
et mode lemodedanslequelouvrirlefichier.Ehoui,encoreunefois,ilexisteplusieursmthodespour
ouvrirunfichier:

MODE_PRIVATE permetdecrer(ouderemplacer,d'ailleurs)unfichierquiserautilis
uniquementparl'application.

MODE_WORLD_READABLE pourcrerunfichierquemmed'autresapplicationspourrontlire.

MODE_WORLD_WRITABLE pourcrerunfichierommed'autresapplicationspourrontlireet
crire.

MODE_APPEND pourcrirelafind'unfichierprexistant,aulieudecrerunfichier.
Parexemple,pourcriremonpseudodansunfichier,jeferai:
FileOutputStreamoutput=null;
StringuserName="Apollidore";

try{
output=openFileOutput(PRENOM,MODE_PRIVATE);
output.write(userName.getBytes());
if(output!=null)
output.close();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}

Demanireanalogue,onpeutretrouverunfichierdanslequellirel'aidedela
mthode FileInputStreamopenFileInput(Stringname) .
N'essayezpasd'insrerdes/oudes\pourmettrevosfichiersdansunautrerpertoire,sinonles
mthodesrenverrontuneexception.
Ensuite,ilexistequelquesmthodesquipermettentdemanipulerlesfichiersauseindecetemplacement
interne,afind'avoirunpeuplusdecontrle.Dj,pourretrouvercetemplacement,ilsuffitd'utiliserla
mthode FilegetFilesDir() .Poursupprimerunfichier,onpeutfaireappel booleandeleteFile(String
name) etpourrcuprerunelistedesfichierscrsparl'application,onemploie String[]fileList() .

Travailleraveclecache

Lesfichiersnormauxnesontsupprimsquesiquelqu'unlefait,quecesoitvousoul'utilisateur.A
contrario,lesfichierssauvegardsaveclecachepeuventaussitresupprimsparlesystme
d'exploitationafindelibrerdel'espace.C'estunavantage,pourlesfichiersqu'onneveutgarderque

2
TP2 SAIDI Jamel Eddine

temporairement.
Pourcriredanslecache,ilsuffitd'utiliserlamthode FilegetCacheDir() pourrcuprerlerpertoire
manipuler.Demaniregnrale,onvited'utilisertropd'espacedanslecache,ils'agitvraimentd'un
espacetemporairedestockagepourpetitsfichiers.
Nevousattendezpasforcmentcequ'Androidsupprimelesfichiers,ilneleferaquequandilenaura
besoin,iln'yapasdemaniredeprdirececomportement.

Enexterne

Leproblmeaveclestockageexterne,c'estqu'iln'existeaucunegarantiequevosfichierssoientprsents.
L'utilisateurpourralesavoirsupprimsouavoirenlevlepriphriquedesonemplacement.Cependant,
cettefoislatailledisponibledestockageestaurendezvous!Enfin,quandnousparlonsdepriphrique
externe,nousparlonsprincipalementd'unecarteSD,d'uneclUSBouencored'unordinateur!
Pourcriresurunpriphriqueexterne,ilvousfaudraajouterla
permission WRITE_EXTERNAL_STORAGE .Pourcefaire,ilfautrajouterlalignesuivantevotre
Manifest: <usespermissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/> .
Toutd'abord,pourvrifierquevousavezbienaccslammoireexterne,vouspouvezutiliserla
mthodestatique StringEnvironment.getExternalStorageState() .Lachanedecaractresretourne
peutcorrespondreplusieursconstantes,dontlaplusimportante
reste Environment.MEDIA_MOUNTED poursavoirsilepriphriqueestbienmontetpeuttrelu
(pourunpriphriquebienmontmaisquinepeutpastrelu,on
utilisera Environment.MEDIA_MOUNTED_READ_ONLY ):
if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()))
//Lepriphriqueestbienmont
else
//Lepriphriquen'estpasbienmontouonnepeutcriredessus

Voustrouverezd'autresstatutsutiliserdansladocumentation.
Afind'obtenirlaracinedesfichiersdupriphriqueexterne,vouspouvezutiliserlamthode
statique FileEnvironment.getExternalStorageDirectory() .Cependant,ilestconseilld'criredesfichiers
uniquementunemplacementprcis: /Android/data/<votre_package>/files/ .Eneffet,lesfichiers
quisetrouventcetemplacementserontautomatiquementsupprimsdsquel'utilisateureffaceravotre
application.

Partagerdesfichiers

Ilarriveaussiquevotreutilisateurveuillepartagerlamusiquequ'ilvientdeconcevoiravecd'autres
applicationsdutlphone,pourlamettreensonnerieparexemple.Cesontdesfichiersquinesontpas
spcifiquesvotreapplicationouquel'utilisateurnesouhaiterapassupprimerladsinstallationde
l'application.Onvadoncfaireensortedesauvegardercesfichiersdesendroitsspcifiques.Unepetite
slectionderpertoires:pourlamusiqueonmettralesfichiersdans /Music/ ,pourlestlchargements
diversonutilisera /Download/ etpourlessonneriesdetlphoneonutilisera /Ringtones/ .

3
TP2 SAIDI Jamel Eddine

Application

nonc

Trssimple,onvafaireensorted'crirevotrepseudodansdeuxfichiers:unenstockageinterne,l'autre
enstockageexterne.N'oubliezpasdevrifierqu'ilestpossibled'criresurlesupportexterne!

Dtailstechniques

Ilexisteuneconstantequiindiquequelepriphriqueestenlectureseule(etqueparconsquentilest
impossibled'criredessus),c'estlaconstante Environment.MEDIA_MOUNTED_READ_ONLY .
Siunfichiern'existepas,vouspouvezlecreravec booleancreateNewFile() .

solution

importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;

importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.os.Environment;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.Toast;

publicclassMainActivityextendsActivity{
privateStringPRENOM="prenom.txt";
privateStringuserName="Apollidore";
privateFilemFile=null;

privateButtonmWrite=null;
privateButtonmRead=null;

@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//Oncreunfichierquicorrespondl'emplacementextrieur
mFile=newFile(Environment.getExternalStorageDirectory().getPath()+"/Android/data/"+getPackageName()+
"/files/"+PRENOM);

mWrite=(Button)findViewById(R.id.write);
mWrite.setOnClickListener(newView.OnClickListener(){

publicvoidonClick(ViewpView){
try{
//Fluxinterne
FileOutputStreamoutput=openFileOutput(PRENOM,MODE_PRIVATE);

//Oncritdanslefluxinterne

4
TP2 SAIDI Jamel Eddine

output.write(userName.getBytes());

if(output!=null)
output.close();

//Silefichierestlisibleetqu'onpeutcrirededans
if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
&&!Environment.MEDIA_MOUNTED_READ_ONLY.equals(Environment.getExternalStorageState())){
//Oncreunnouveaufichier.Silefichierexistedj,ilneserapascr
mFile.createNewFile();
output=newFileOutputStream(mFile);
output.write(userName.getBytes());
if(output!=null)
output.close();
}
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
});

mRead=(Button)findViewById(R.id.read);
mRead.setOnClickListener(newView.OnClickListener(){

publicvoidonClick(ViewpView){
try{
FileInputStreaminput=openFileInput(PRENOM);
intvalue;
//OnutiliseunStringBufferpourconstruirelachaneaufuretmesure
StringBufferlu=newStringBuffer();
//Onlitlescaractreslesunsaprslesautres
while((value=input.read())!=1){
//Oncritdanslefichierlecaractrelu
lu.append((char)value);
}
Toast.makeText(MainActivity.this,"Interne:"+lu.toString(),Toast.LENGTH_SHORT).show();
if(input!=null)
input.close();

if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
lu=newStringBuffer();
input=newFileInputStream(mFile);
while((value=input.read())!=1)
lu.append((char)value);

Toast.makeText(MainActivity.this,"Externe:"+lu.toString(),Toast.LENGTH_SHORT).show();
if(input!=null)
input.close();
}

}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();

5
TP2 SAIDI Jamel Eddine

}
}
});
}
}

Você também pode gostar