52
Gestion des exceptions E/S

Gestion des exceptions E/S

Embed Size (px)

DESCRIPTION

Gestion des exceptions E/S. Problèmes des erreurs dans les programmes. erreur matérielle (imprimante débranchée, serveur en panne), contrainte physique (disque plein), erreurs de programmation (cas non prévu par le programme, division par zéro, ouverture d’un fichier qui n’existe pas), - PowerPoint PPT Presentation

Citation preview

Page 1: Gestion des exceptions E/S

Gestion des exceptionsES

Problegravemes des erreurs dans les programmes erreur mateacuterielle (imprimante

deacutebrancheacutee serveur en panne) contrainte physique (disque plein) erreurs de programmation (cas non

preacutevu par le programme division par zeacutero ouverture drsquoun fichier qui nrsquoexiste pas)

utilisateur reacutecalcitrant (type de donneacutees rentreacutees par lrsquoutilisateur incorrect)

En cas de problegravemes

envoyer un message drsquoerreur sauvegarder lrsquoensemble du travail

en cours permettre une sortie correcte du

programme revenir en arriegravere et effectuer un

autre traitement

Comment faire Solution tout preacutevoir (tester

lrsquoeacutegaliteacute agrave zeacutero du deacutenominateur avant une division etc)

Problegraveme vous avez beau ecirctre un bon programmeur vous ne pouvez pas tout controcircler que faire dans le cas drsquoun mauvais

type en entreacutee ou pour les cas non preacutevus par le programme

Exceptions

2 familles drsquoexceptions non fatales fatales (provoquent lrsquoarrecirct du

programme)

Hieacuterarchie des exceptions

Object

Throwable

Exception

RunTimeException IOException

Error

hellip

Une exception est un objet de type Exception

Instancier par nrsquoimporte quelle sous-classe drsquoException

Hieacuterarchie RuntimeException et Error Une hieacuterarchie drsquoexceptions non

controcircleacutees par le compilateur

Hieacuterarchie error erreurs graves

Exemples NoSuchMethodError la meacutethode

reacutefeacuterenceacutee nrsquoest pas accessible StackOverflowError deacutebordement de

pile

Hieacuterarchie RuntimeException

Exemples ArithmeticException une erreur

arithmeacutetique (division par 0hellip) IndexOutofBoundsException indice

drsquoun tableau est en dehors des bornes autoriseacutees

Il nrsquoest pas obligatoire de geacuterer les exceptions de type RuntimeException

public class ZeroDivide

static public void main(String[] args)int a = 3int b = 0Systemoutprintln(Resultat de ladivision + ab)

Ce code se compile mais une exception apparaicirct au niveau

de lrsquoexeacutecution et le programme srsquoarecircte Une ArithmeticException est une RuntimeException

Les RuntimeException ne sont pas veacuterifieacutees par le compilateur

Les autres exceptions doivent ecirctre prise en compte

public class TaperTouche

static public void main(String[] args)Systemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

Ce code ne compile pas parce que la meacutethode read() est susceptible de lever une exception de type IOException

Lrsquoappel drsquoune meacutethode qui lance une exception (une meacutethode qui deacuteclare qursquoelle lance une exception) doit ecirctre pris en compte dans le code appelant Encapsuler lrsquoappel dans un bloc

trycatch

Controcircle de flot dans les blocs Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

2

Si le bloc Try reacuteussit

Controcircle de flot dans les bloc Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

3

Si le bloc Try eacutechoue

2

Finally pour ce qui srsquoexeacutecute dans tous les cas

Try Instruction 1 Instruction i

catch (Exception ex)

Instruction j finally

Instruction k

Try Instruction 1 Instruction iInstruction k

catch (Exception ex)

Instruction jInstruction k

Remarque si le bloc trycatch a une instruction return finally srsquoexeacutecute quand mecircme Le flot saute agrave finally puis revient agrave return

Extrait de la documentation de la classe read Method Detail read public abstract int read() throws IOException

Reads the next byte of data from the input stream The value byte is returned as an int in the range 0 to 255 If no byte is available because the end of the stream has been reached the value -1 is returned This method blocks until input data is available the end of the stream is detected or an exception is thrown A subclass must provide an implementation of this method

Returns the next byte of data or -1 if the end of the stream is

reached Throws

IOException - if an IO error occurs

Deux maniegraveres de geacuterer les exceptions la prendre en compte ou lrsquoesquiverimport javaioIOExceptionpublic class TaperTouche

static public void main(String[] args)

Systemoutprintln(Tapez une touche pour terminer le programme)

trySysteminread()catch(IOException e)Systemoutprintln(Une IOException a eacuteteacute deacutetecteacute )

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 2: Gestion des exceptions E/S

Problegravemes des erreurs dans les programmes erreur mateacuterielle (imprimante

deacutebrancheacutee serveur en panne) contrainte physique (disque plein) erreurs de programmation (cas non

preacutevu par le programme division par zeacutero ouverture drsquoun fichier qui nrsquoexiste pas)

utilisateur reacutecalcitrant (type de donneacutees rentreacutees par lrsquoutilisateur incorrect)

En cas de problegravemes

envoyer un message drsquoerreur sauvegarder lrsquoensemble du travail

en cours permettre une sortie correcte du

programme revenir en arriegravere et effectuer un

autre traitement

Comment faire Solution tout preacutevoir (tester

lrsquoeacutegaliteacute agrave zeacutero du deacutenominateur avant une division etc)

Problegraveme vous avez beau ecirctre un bon programmeur vous ne pouvez pas tout controcircler que faire dans le cas drsquoun mauvais

type en entreacutee ou pour les cas non preacutevus par le programme

Exceptions

2 familles drsquoexceptions non fatales fatales (provoquent lrsquoarrecirct du

programme)

Hieacuterarchie des exceptions

Object

Throwable

Exception

RunTimeException IOException

Error

hellip

Une exception est un objet de type Exception

Instancier par nrsquoimporte quelle sous-classe drsquoException

Hieacuterarchie RuntimeException et Error Une hieacuterarchie drsquoexceptions non

controcircleacutees par le compilateur

Hieacuterarchie error erreurs graves

Exemples NoSuchMethodError la meacutethode

reacutefeacuterenceacutee nrsquoest pas accessible StackOverflowError deacutebordement de

pile

Hieacuterarchie RuntimeException

Exemples ArithmeticException une erreur

arithmeacutetique (division par 0hellip) IndexOutofBoundsException indice

drsquoun tableau est en dehors des bornes autoriseacutees

Il nrsquoest pas obligatoire de geacuterer les exceptions de type RuntimeException

public class ZeroDivide

static public void main(String[] args)int a = 3int b = 0Systemoutprintln(Resultat de ladivision + ab)

Ce code se compile mais une exception apparaicirct au niveau

de lrsquoexeacutecution et le programme srsquoarecircte Une ArithmeticException est une RuntimeException

Les RuntimeException ne sont pas veacuterifieacutees par le compilateur

Les autres exceptions doivent ecirctre prise en compte

public class TaperTouche

static public void main(String[] args)Systemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

Ce code ne compile pas parce que la meacutethode read() est susceptible de lever une exception de type IOException

Lrsquoappel drsquoune meacutethode qui lance une exception (une meacutethode qui deacuteclare qursquoelle lance une exception) doit ecirctre pris en compte dans le code appelant Encapsuler lrsquoappel dans un bloc

trycatch

Controcircle de flot dans les blocs Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

2

Si le bloc Try reacuteussit

Controcircle de flot dans les bloc Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

3

Si le bloc Try eacutechoue

2

Finally pour ce qui srsquoexeacutecute dans tous les cas

Try Instruction 1 Instruction i

catch (Exception ex)

Instruction j finally

Instruction k

Try Instruction 1 Instruction iInstruction k

catch (Exception ex)

Instruction jInstruction k

Remarque si le bloc trycatch a une instruction return finally srsquoexeacutecute quand mecircme Le flot saute agrave finally puis revient agrave return

Extrait de la documentation de la classe read Method Detail read public abstract int read() throws IOException

Reads the next byte of data from the input stream The value byte is returned as an int in the range 0 to 255 If no byte is available because the end of the stream has been reached the value -1 is returned This method blocks until input data is available the end of the stream is detected or an exception is thrown A subclass must provide an implementation of this method

Returns the next byte of data or -1 if the end of the stream is

reached Throws

IOException - if an IO error occurs

Deux maniegraveres de geacuterer les exceptions la prendre en compte ou lrsquoesquiverimport javaioIOExceptionpublic class TaperTouche

static public void main(String[] args)

Systemoutprintln(Tapez une touche pour terminer le programme)

trySysteminread()catch(IOException e)Systemoutprintln(Une IOException a eacuteteacute deacutetecteacute )

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 3: Gestion des exceptions E/S

En cas de problegravemes

envoyer un message drsquoerreur sauvegarder lrsquoensemble du travail

en cours permettre une sortie correcte du

programme revenir en arriegravere et effectuer un

autre traitement

Comment faire Solution tout preacutevoir (tester

lrsquoeacutegaliteacute agrave zeacutero du deacutenominateur avant une division etc)

Problegraveme vous avez beau ecirctre un bon programmeur vous ne pouvez pas tout controcircler que faire dans le cas drsquoun mauvais

type en entreacutee ou pour les cas non preacutevus par le programme

Exceptions

2 familles drsquoexceptions non fatales fatales (provoquent lrsquoarrecirct du

programme)

Hieacuterarchie des exceptions

Object

Throwable

Exception

RunTimeException IOException

Error

hellip

Une exception est un objet de type Exception

Instancier par nrsquoimporte quelle sous-classe drsquoException

Hieacuterarchie RuntimeException et Error Une hieacuterarchie drsquoexceptions non

controcircleacutees par le compilateur

Hieacuterarchie error erreurs graves

Exemples NoSuchMethodError la meacutethode

reacutefeacuterenceacutee nrsquoest pas accessible StackOverflowError deacutebordement de

pile

Hieacuterarchie RuntimeException

Exemples ArithmeticException une erreur

arithmeacutetique (division par 0hellip) IndexOutofBoundsException indice

drsquoun tableau est en dehors des bornes autoriseacutees

Il nrsquoest pas obligatoire de geacuterer les exceptions de type RuntimeException

public class ZeroDivide

static public void main(String[] args)int a = 3int b = 0Systemoutprintln(Resultat de ladivision + ab)

Ce code se compile mais une exception apparaicirct au niveau

de lrsquoexeacutecution et le programme srsquoarecircte Une ArithmeticException est une RuntimeException

Les RuntimeException ne sont pas veacuterifieacutees par le compilateur

Les autres exceptions doivent ecirctre prise en compte

public class TaperTouche

static public void main(String[] args)Systemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

Ce code ne compile pas parce que la meacutethode read() est susceptible de lever une exception de type IOException

Lrsquoappel drsquoune meacutethode qui lance une exception (une meacutethode qui deacuteclare qursquoelle lance une exception) doit ecirctre pris en compte dans le code appelant Encapsuler lrsquoappel dans un bloc

trycatch

Controcircle de flot dans les blocs Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

2

Si le bloc Try reacuteussit

Controcircle de flot dans les bloc Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

3

Si le bloc Try eacutechoue

2

Finally pour ce qui srsquoexeacutecute dans tous les cas

Try Instruction 1 Instruction i

catch (Exception ex)

Instruction j finally

Instruction k

Try Instruction 1 Instruction iInstruction k

catch (Exception ex)

Instruction jInstruction k

Remarque si le bloc trycatch a une instruction return finally srsquoexeacutecute quand mecircme Le flot saute agrave finally puis revient agrave return

Extrait de la documentation de la classe read Method Detail read public abstract int read() throws IOException

Reads the next byte of data from the input stream The value byte is returned as an int in the range 0 to 255 If no byte is available because the end of the stream has been reached the value -1 is returned This method blocks until input data is available the end of the stream is detected or an exception is thrown A subclass must provide an implementation of this method

Returns the next byte of data or -1 if the end of the stream is

reached Throws

IOException - if an IO error occurs

Deux maniegraveres de geacuterer les exceptions la prendre en compte ou lrsquoesquiverimport javaioIOExceptionpublic class TaperTouche

static public void main(String[] args)

Systemoutprintln(Tapez une touche pour terminer le programme)

trySysteminread()catch(IOException e)Systemoutprintln(Une IOException a eacuteteacute deacutetecteacute )

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 4: Gestion des exceptions E/S

Comment faire Solution tout preacutevoir (tester

lrsquoeacutegaliteacute agrave zeacutero du deacutenominateur avant une division etc)

Problegraveme vous avez beau ecirctre un bon programmeur vous ne pouvez pas tout controcircler que faire dans le cas drsquoun mauvais

type en entreacutee ou pour les cas non preacutevus par le programme

Exceptions

2 familles drsquoexceptions non fatales fatales (provoquent lrsquoarrecirct du

programme)

Hieacuterarchie des exceptions

Object

Throwable

Exception

RunTimeException IOException

Error

hellip

Une exception est un objet de type Exception

Instancier par nrsquoimporte quelle sous-classe drsquoException

Hieacuterarchie RuntimeException et Error Une hieacuterarchie drsquoexceptions non

controcircleacutees par le compilateur

Hieacuterarchie error erreurs graves

Exemples NoSuchMethodError la meacutethode

reacutefeacuterenceacutee nrsquoest pas accessible StackOverflowError deacutebordement de

pile

Hieacuterarchie RuntimeException

Exemples ArithmeticException une erreur

arithmeacutetique (division par 0hellip) IndexOutofBoundsException indice

drsquoun tableau est en dehors des bornes autoriseacutees

Il nrsquoest pas obligatoire de geacuterer les exceptions de type RuntimeException

public class ZeroDivide

static public void main(String[] args)int a = 3int b = 0Systemoutprintln(Resultat de ladivision + ab)

Ce code se compile mais une exception apparaicirct au niveau

de lrsquoexeacutecution et le programme srsquoarecircte Une ArithmeticException est une RuntimeException

Les RuntimeException ne sont pas veacuterifieacutees par le compilateur

Les autres exceptions doivent ecirctre prise en compte

public class TaperTouche

static public void main(String[] args)Systemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

Ce code ne compile pas parce que la meacutethode read() est susceptible de lever une exception de type IOException

Lrsquoappel drsquoune meacutethode qui lance une exception (une meacutethode qui deacuteclare qursquoelle lance une exception) doit ecirctre pris en compte dans le code appelant Encapsuler lrsquoappel dans un bloc

trycatch

Controcircle de flot dans les blocs Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

2

Si le bloc Try reacuteussit

Controcircle de flot dans les bloc Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

3

Si le bloc Try eacutechoue

2

Finally pour ce qui srsquoexeacutecute dans tous les cas

Try Instruction 1 Instruction i

catch (Exception ex)

Instruction j finally

Instruction k

Try Instruction 1 Instruction iInstruction k

catch (Exception ex)

Instruction jInstruction k

Remarque si le bloc trycatch a une instruction return finally srsquoexeacutecute quand mecircme Le flot saute agrave finally puis revient agrave return

Extrait de la documentation de la classe read Method Detail read public abstract int read() throws IOException

Reads the next byte of data from the input stream The value byte is returned as an int in the range 0 to 255 If no byte is available because the end of the stream has been reached the value -1 is returned This method blocks until input data is available the end of the stream is detected or an exception is thrown A subclass must provide an implementation of this method

Returns the next byte of data or -1 if the end of the stream is

reached Throws

IOException - if an IO error occurs

Deux maniegraveres de geacuterer les exceptions la prendre en compte ou lrsquoesquiverimport javaioIOExceptionpublic class TaperTouche

static public void main(String[] args)

Systemoutprintln(Tapez une touche pour terminer le programme)

trySysteminread()catch(IOException e)Systemoutprintln(Une IOException a eacuteteacute deacutetecteacute )

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 5: Gestion des exceptions E/S

Exceptions

2 familles drsquoexceptions non fatales fatales (provoquent lrsquoarrecirct du

programme)

Hieacuterarchie des exceptions

Object

Throwable

Exception

RunTimeException IOException

Error

hellip

Une exception est un objet de type Exception

Instancier par nrsquoimporte quelle sous-classe drsquoException

Hieacuterarchie RuntimeException et Error Une hieacuterarchie drsquoexceptions non

controcircleacutees par le compilateur

Hieacuterarchie error erreurs graves

Exemples NoSuchMethodError la meacutethode

reacutefeacuterenceacutee nrsquoest pas accessible StackOverflowError deacutebordement de

pile

Hieacuterarchie RuntimeException

Exemples ArithmeticException une erreur

arithmeacutetique (division par 0hellip) IndexOutofBoundsException indice

drsquoun tableau est en dehors des bornes autoriseacutees

Il nrsquoest pas obligatoire de geacuterer les exceptions de type RuntimeException

public class ZeroDivide

static public void main(String[] args)int a = 3int b = 0Systemoutprintln(Resultat de ladivision + ab)

Ce code se compile mais une exception apparaicirct au niveau

de lrsquoexeacutecution et le programme srsquoarecircte Une ArithmeticException est une RuntimeException

Les RuntimeException ne sont pas veacuterifieacutees par le compilateur

Les autres exceptions doivent ecirctre prise en compte

public class TaperTouche

static public void main(String[] args)Systemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

Ce code ne compile pas parce que la meacutethode read() est susceptible de lever une exception de type IOException

Lrsquoappel drsquoune meacutethode qui lance une exception (une meacutethode qui deacuteclare qursquoelle lance une exception) doit ecirctre pris en compte dans le code appelant Encapsuler lrsquoappel dans un bloc

trycatch

Controcircle de flot dans les blocs Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

2

Si le bloc Try reacuteussit

Controcircle de flot dans les bloc Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

3

Si le bloc Try eacutechoue

2

Finally pour ce qui srsquoexeacutecute dans tous les cas

Try Instruction 1 Instruction i

catch (Exception ex)

Instruction j finally

Instruction k

Try Instruction 1 Instruction iInstruction k

catch (Exception ex)

Instruction jInstruction k

Remarque si le bloc trycatch a une instruction return finally srsquoexeacutecute quand mecircme Le flot saute agrave finally puis revient agrave return

Extrait de la documentation de la classe read Method Detail read public abstract int read() throws IOException

Reads the next byte of data from the input stream The value byte is returned as an int in the range 0 to 255 If no byte is available because the end of the stream has been reached the value -1 is returned This method blocks until input data is available the end of the stream is detected or an exception is thrown A subclass must provide an implementation of this method

Returns the next byte of data or -1 if the end of the stream is

reached Throws

IOException - if an IO error occurs

Deux maniegraveres de geacuterer les exceptions la prendre en compte ou lrsquoesquiverimport javaioIOExceptionpublic class TaperTouche

static public void main(String[] args)

Systemoutprintln(Tapez une touche pour terminer le programme)

trySysteminread()catch(IOException e)Systemoutprintln(Une IOException a eacuteteacute deacutetecteacute )

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 6: Gestion des exceptions E/S

Hieacuterarchie des exceptions

Object

Throwable

Exception

RunTimeException IOException

Error

hellip

Une exception est un objet de type Exception

Instancier par nrsquoimporte quelle sous-classe drsquoException

Hieacuterarchie RuntimeException et Error Une hieacuterarchie drsquoexceptions non

controcircleacutees par le compilateur

Hieacuterarchie error erreurs graves

Exemples NoSuchMethodError la meacutethode

reacutefeacuterenceacutee nrsquoest pas accessible StackOverflowError deacutebordement de

pile

Hieacuterarchie RuntimeException

Exemples ArithmeticException une erreur

arithmeacutetique (division par 0hellip) IndexOutofBoundsException indice

drsquoun tableau est en dehors des bornes autoriseacutees

Il nrsquoest pas obligatoire de geacuterer les exceptions de type RuntimeException

public class ZeroDivide

static public void main(String[] args)int a = 3int b = 0Systemoutprintln(Resultat de ladivision + ab)

Ce code se compile mais une exception apparaicirct au niveau

de lrsquoexeacutecution et le programme srsquoarecircte Une ArithmeticException est une RuntimeException

Les RuntimeException ne sont pas veacuterifieacutees par le compilateur

Les autres exceptions doivent ecirctre prise en compte

public class TaperTouche

static public void main(String[] args)Systemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

Ce code ne compile pas parce que la meacutethode read() est susceptible de lever une exception de type IOException

Lrsquoappel drsquoune meacutethode qui lance une exception (une meacutethode qui deacuteclare qursquoelle lance une exception) doit ecirctre pris en compte dans le code appelant Encapsuler lrsquoappel dans un bloc

trycatch

Controcircle de flot dans les blocs Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

2

Si le bloc Try reacuteussit

Controcircle de flot dans les bloc Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

3

Si le bloc Try eacutechoue

2

Finally pour ce qui srsquoexeacutecute dans tous les cas

Try Instruction 1 Instruction i

catch (Exception ex)

Instruction j finally

Instruction k

Try Instruction 1 Instruction iInstruction k

catch (Exception ex)

Instruction jInstruction k

Remarque si le bloc trycatch a une instruction return finally srsquoexeacutecute quand mecircme Le flot saute agrave finally puis revient agrave return

Extrait de la documentation de la classe read Method Detail read public abstract int read() throws IOException

Reads the next byte of data from the input stream The value byte is returned as an int in the range 0 to 255 If no byte is available because the end of the stream has been reached the value -1 is returned This method blocks until input data is available the end of the stream is detected or an exception is thrown A subclass must provide an implementation of this method

Returns the next byte of data or -1 if the end of the stream is

reached Throws

IOException - if an IO error occurs

Deux maniegraveres de geacuterer les exceptions la prendre en compte ou lrsquoesquiverimport javaioIOExceptionpublic class TaperTouche

static public void main(String[] args)

Systemoutprintln(Tapez une touche pour terminer le programme)

trySysteminread()catch(IOException e)Systemoutprintln(Une IOException a eacuteteacute deacutetecteacute )

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 7: Gestion des exceptions E/S

Une exception est un objet de type Exception

Instancier par nrsquoimporte quelle sous-classe drsquoException

Hieacuterarchie RuntimeException et Error Une hieacuterarchie drsquoexceptions non

controcircleacutees par le compilateur

Hieacuterarchie error erreurs graves

Exemples NoSuchMethodError la meacutethode

reacutefeacuterenceacutee nrsquoest pas accessible StackOverflowError deacutebordement de

pile

Hieacuterarchie RuntimeException

Exemples ArithmeticException une erreur

arithmeacutetique (division par 0hellip) IndexOutofBoundsException indice

drsquoun tableau est en dehors des bornes autoriseacutees

Il nrsquoest pas obligatoire de geacuterer les exceptions de type RuntimeException

public class ZeroDivide

static public void main(String[] args)int a = 3int b = 0Systemoutprintln(Resultat de ladivision + ab)

Ce code se compile mais une exception apparaicirct au niveau

de lrsquoexeacutecution et le programme srsquoarecircte Une ArithmeticException est une RuntimeException

Les RuntimeException ne sont pas veacuterifieacutees par le compilateur

Les autres exceptions doivent ecirctre prise en compte

public class TaperTouche

static public void main(String[] args)Systemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

Ce code ne compile pas parce que la meacutethode read() est susceptible de lever une exception de type IOException

Lrsquoappel drsquoune meacutethode qui lance une exception (une meacutethode qui deacuteclare qursquoelle lance une exception) doit ecirctre pris en compte dans le code appelant Encapsuler lrsquoappel dans un bloc

trycatch

Controcircle de flot dans les blocs Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

2

Si le bloc Try reacuteussit

Controcircle de flot dans les bloc Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

3

Si le bloc Try eacutechoue

2

Finally pour ce qui srsquoexeacutecute dans tous les cas

Try Instruction 1 Instruction i

catch (Exception ex)

Instruction j finally

Instruction k

Try Instruction 1 Instruction iInstruction k

catch (Exception ex)

Instruction jInstruction k

Remarque si le bloc trycatch a une instruction return finally srsquoexeacutecute quand mecircme Le flot saute agrave finally puis revient agrave return

Extrait de la documentation de la classe read Method Detail read public abstract int read() throws IOException

Reads the next byte of data from the input stream The value byte is returned as an int in the range 0 to 255 If no byte is available because the end of the stream has been reached the value -1 is returned This method blocks until input data is available the end of the stream is detected or an exception is thrown A subclass must provide an implementation of this method

Returns the next byte of data or -1 if the end of the stream is

reached Throws

IOException - if an IO error occurs

Deux maniegraveres de geacuterer les exceptions la prendre en compte ou lrsquoesquiverimport javaioIOExceptionpublic class TaperTouche

static public void main(String[] args)

Systemoutprintln(Tapez une touche pour terminer le programme)

trySysteminread()catch(IOException e)Systemoutprintln(Une IOException a eacuteteacute deacutetecteacute )

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 8: Gestion des exceptions E/S

Hieacuterarchie error erreurs graves

Exemples NoSuchMethodError la meacutethode

reacutefeacuterenceacutee nrsquoest pas accessible StackOverflowError deacutebordement de

pile

Hieacuterarchie RuntimeException

Exemples ArithmeticException une erreur

arithmeacutetique (division par 0hellip) IndexOutofBoundsException indice

drsquoun tableau est en dehors des bornes autoriseacutees

Il nrsquoest pas obligatoire de geacuterer les exceptions de type RuntimeException

public class ZeroDivide

static public void main(String[] args)int a = 3int b = 0Systemoutprintln(Resultat de ladivision + ab)

Ce code se compile mais une exception apparaicirct au niveau

de lrsquoexeacutecution et le programme srsquoarecircte Une ArithmeticException est une RuntimeException

Les RuntimeException ne sont pas veacuterifieacutees par le compilateur

Les autres exceptions doivent ecirctre prise en compte

public class TaperTouche

static public void main(String[] args)Systemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

Ce code ne compile pas parce que la meacutethode read() est susceptible de lever une exception de type IOException

Lrsquoappel drsquoune meacutethode qui lance une exception (une meacutethode qui deacuteclare qursquoelle lance une exception) doit ecirctre pris en compte dans le code appelant Encapsuler lrsquoappel dans un bloc

trycatch

Controcircle de flot dans les blocs Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

2

Si le bloc Try reacuteussit

Controcircle de flot dans les bloc Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

3

Si le bloc Try eacutechoue

2

Finally pour ce qui srsquoexeacutecute dans tous les cas

Try Instruction 1 Instruction i

catch (Exception ex)

Instruction j finally

Instruction k

Try Instruction 1 Instruction iInstruction k

catch (Exception ex)

Instruction jInstruction k

Remarque si le bloc trycatch a une instruction return finally srsquoexeacutecute quand mecircme Le flot saute agrave finally puis revient agrave return

Extrait de la documentation de la classe read Method Detail read public abstract int read() throws IOException

Reads the next byte of data from the input stream The value byte is returned as an int in the range 0 to 255 If no byte is available because the end of the stream has been reached the value -1 is returned This method blocks until input data is available the end of the stream is detected or an exception is thrown A subclass must provide an implementation of this method

Returns the next byte of data or -1 if the end of the stream is

reached Throws

IOException - if an IO error occurs

Deux maniegraveres de geacuterer les exceptions la prendre en compte ou lrsquoesquiverimport javaioIOExceptionpublic class TaperTouche

static public void main(String[] args)

Systemoutprintln(Tapez une touche pour terminer le programme)

trySysteminread()catch(IOException e)Systemoutprintln(Une IOException a eacuteteacute deacutetecteacute )

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 9: Gestion des exceptions E/S

Hieacuterarchie RuntimeException

Exemples ArithmeticException une erreur

arithmeacutetique (division par 0hellip) IndexOutofBoundsException indice

drsquoun tableau est en dehors des bornes autoriseacutees

Il nrsquoest pas obligatoire de geacuterer les exceptions de type RuntimeException

public class ZeroDivide

static public void main(String[] args)int a = 3int b = 0Systemoutprintln(Resultat de ladivision + ab)

Ce code se compile mais une exception apparaicirct au niveau

de lrsquoexeacutecution et le programme srsquoarecircte Une ArithmeticException est une RuntimeException

Les RuntimeException ne sont pas veacuterifieacutees par le compilateur

Les autres exceptions doivent ecirctre prise en compte

public class TaperTouche

static public void main(String[] args)Systemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

Ce code ne compile pas parce que la meacutethode read() est susceptible de lever une exception de type IOException

Lrsquoappel drsquoune meacutethode qui lance une exception (une meacutethode qui deacuteclare qursquoelle lance une exception) doit ecirctre pris en compte dans le code appelant Encapsuler lrsquoappel dans un bloc

trycatch

Controcircle de flot dans les blocs Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

2

Si le bloc Try reacuteussit

Controcircle de flot dans les bloc Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

3

Si le bloc Try eacutechoue

2

Finally pour ce qui srsquoexeacutecute dans tous les cas

Try Instruction 1 Instruction i

catch (Exception ex)

Instruction j finally

Instruction k

Try Instruction 1 Instruction iInstruction k

catch (Exception ex)

Instruction jInstruction k

Remarque si le bloc trycatch a une instruction return finally srsquoexeacutecute quand mecircme Le flot saute agrave finally puis revient agrave return

Extrait de la documentation de la classe read Method Detail read public abstract int read() throws IOException

Reads the next byte of data from the input stream The value byte is returned as an int in the range 0 to 255 If no byte is available because the end of the stream has been reached the value -1 is returned This method blocks until input data is available the end of the stream is detected or an exception is thrown A subclass must provide an implementation of this method

Returns the next byte of data or -1 if the end of the stream is

reached Throws

IOException - if an IO error occurs

Deux maniegraveres de geacuterer les exceptions la prendre en compte ou lrsquoesquiverimport javaioIOExceptionpublic class TaperTouche

static public void main(String[] args)

Systemoutprintln(Tapez une touche pour terminer le programme)

trySysteminread()catch(IOException e)Systemoutprintln(Une IOException a eacuteteacute deacutetecteacute )

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 10: Gestion des exceptions E/S

Il nrsquoest pas obligatoire de geacuterer les exceptions de type RuntimeException

public class ZeroDivide

static public void main(String[] args)int a = 3int b = 0Systemoutprintln(Resultat de ladivision + ab)

Ce code se compile mais une exception apparaicirct au niveau

de lrsquoexeacutecution et le programme srsquoarecircte Une ArithmeticException est une RuntimeException

Les RuntimeException ne sont pas veacuterifieacutees par le compilateur

Les autres exceptions doivent ecirctre prise en compte

public class TaperTouche

static public void main(String[] args)Systemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

Ce code ne compile pas parce que la meacutethode read() est susceptible de lever une exception de type IOException

Lrsquoappel drsquoune meacutethode qui lance une exception (une meacutethode qui deacuteclare qursquoelle lance une exception) doit ecirctre pris en compte dans le code appelant Encapsuler lrsquoappel dans un bloc

trycatch

Controcircle de flot dans les blocs Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

2

Si le bloc Try reacuteussit

Controcircle de flot dans les bloc Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

3

Si le bloc Try eacutechoue

2

Finally pour ce qui srsquoexeacutecute dans tous les cas

Try Instruction 1 Instruction i

catch (Exception ex)

Instruction j finally

Instruction k

Try Instruction 1 Instruction iInstruction k

catch (Exception ex)

Instruction jInstruction k

Remarque si le bloc trycatch a une instruction return finally srsquoexeacutecute quand mecircme Le flot saute agrave finally puis revient agrave return

Extrait de la documentation de la classe read Method Detail read public abstract int read() throws IOException

Reads the next byte of data from the input stream The value byte is returned as an int in the range 0 to 255 If no byte is available because the end of the stream has been reached the value -1 is returned This method blocks until input data is available the end of the stream is detected or an exception is thrown A subclass must provide an implementation of this method

Returns the next byte of data or -1 if the end of the stream is

reached Throws

IOException - if an IO error occurs

Deux maniegraveres de geacuterer les exceptions la prendre en compte ou lrsquoesquiverimport javaioIOExceptionpublic class TaperTouche

static public void main(String[] args)

Systemoutprintln(Tapez une touche pour terminer le programme)

trySysteminread()catch(IOException e)Systemoutprintln(Une IOException a eacuteteacute deacutetecteacute )

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 11: Gestion des exceptions E/S

Les autres exceptions doivent ecirctre prise en compte

public class TaperTouche

static public void main(String[] args)Systemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

Ce code ne compile pas parce que la meacutethode read() est susceptible de lever une exception de type IOException

Lrsquoappel drsquoune meacutethode qui lance une exception (une meacutethode qui deacuteclare qursquoelle lance une exception) doit ecirctre pris en compte dans le code appelant Encapsuler lrsquoappel dans un bloc

trycatch

Controcircle de flot dans les blocs Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

2

Si le bloc Try reacuteussit

Controcircle de flot dans les bloc Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

3

Si le bloc Try eacutechoue

2

Finally pour ce qui srsquoexeacutecute dans tous les cas

Try Instruction 1 Instruction i

catch (Exception ex)

Instruction j finally

Instruction k

Try Instruction 1 Instruction iInstruction k

catch (Exception ex)

Instruction jInstruction k

Remarque si le bloc trycatch a une instruction return finally srsquoexeacutecute quand mecircme Le flot saute agrave finally puis revient agrave return

Extrait de la documentation de la classe read Method Detail read public abstract int read() throws IOException

Reads the next byte of data from the input stream The value byte is returned as an int in the range 0 to 255 If no byte is available because the end of the stream has been reached the value -1 is returned This method blocks until input data is available the end of the stream is detected or an exception is thrown A subclass must provide an implementation of this method

Returns the next byte of data or -1 if the end of the stream is

reached Throws

IOException - if an IO error occurs

Deux maniegraveres de geacuterer les exceptions la prendre en compte ou lrsquoesquiverimport javaioIOExceptionpublic class TaperTouche

static public void main(String[] args)

Systemoutprintln(Tapez une touche pour terminer le programme)

trySysteminread()catch(IOException e)Systemoutprintln(Une IOException a eacuteteacute deacutetecteacute )

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 12: Gestion des exceptions E/S

Lrsquoappel drsquoune meacutethode qui lance une exception (une meacutethode qui deacuteclare qursquoelle lance une exception) doit ecirctre pris en compte dans le code appelant Encapsuler lrsquoappel dans un bloc

trycatch

Controcircle de flot dans les blocs Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

2

Si le bloc Try reacuteussit

Controcircle de flot dans les bloc Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

3

Si le bloc Try eacutechoue

2

Finally pour ce qui srsquoexeacutecute dans tous les cas

Try Instruction 1 Instruction i

catch (Exception ex)

Instruction j finally

Instruction k

Try Instruction 1 Instruction iInstruction k

catch (Exception ex)

Instruction jInstruction k

Remarque si le bloc trycatch a une instruction return finally srsquoexeacutecute quand mecircme Le flot saute agrave finally puis revient agrave return

Extrait de la documentation de la classe read Method Detail read public abstract int read() throws IOException

Reads the next byte of data from the input stream The value byte is returned as an int in the range 0 to 255 If no byte is available because the end of the stream has been reached the value -1 is returned This method blocks until input data is available the end of the stream is detected or an exception is thrown A subclass must provide an implementation of this method

Returns the next byte of data or -1 if the end of the stream is

reached Throws

IOException - if an IO error occurs

Deux maniegraveres de geacuterer les exceptions la prendre en compte ou lrsquoesquiverimport javaioIOExceptionpublic class TaperTouche

static public void main(String[] args)

Systemoutprintln(Tapez une touche pour terminer le programme)

trySysteminread()catch(IOException e)Systemoutprintln(Une IOException a eacuteteacute deacutetecteacute )

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 13: Gestion des exceptions E/S

Controcircle de flot dans les blocs Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

2

Si le bloc Try reacuteussit

Controcircle de flot dans les bloc Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

3

Si le bloc Try eacutechoue

2

Finally pour ce qui srsquoexeacutecute dans tous les cas

Try Instruction 1 Instruction i

catch (Exception ex)

Instruction j finally

Instruction k

Try Instruction 1 Instruction iInstruction k

catch (Exception ex)

Instruction jInstruction k

Remarque si le bloc trycatch a une instruction return finally srsquoexeacutecute quand mecircme Le flot saute agrave finally puis revient agrave return

Extrait de la documentation de la classe read Method Detail read public abstract int read() throws IOException

Reads the next byte of data from the input stream The value byte is returned as an int in the range 0 to 255 If no byte is available because the end of the stream has been reached the value -1 is returned This method blocks until input data is available the end of the stream is detected or an exception is thrown A subclass must provide an implementation of this method

Returns the next byte of data or -1 if the end of the stream is

reached Throws

IOException - if an IO error occurs

Deux maniegraveres de geacuterer les exceptions la prendre en compte ou lrsquoesquiverimport javaioIOExceptionpublic class TaperTouche

static public void main(String[] args)

Systemoutprintln(Tapez une touche pour terminer le programme)

trySysteminread()catch(IOException e)Systemoutprintln(Une IOException a eacuteteacute deacutetecteacute )

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 14: Gestion des exceptions E/S

Controcircle de flot dans les bloc Trycatch

Try Instruction 1 dans cette instruction il y a une

possibiliteacute de leveacutee drsquoexception

Instruction i

catch (Exception ex) Instruction j

Instruction k

1

3

Si le bloc Try eacutechoue

2

Finally pour ce qui srsquoexeacutecute dans tous les cas

Try Instruction 1 Instruction i

catch (Exception ex)

Instruction j finally

Instruction k

Try Instruction 1 Instruction iInstruction k

catch (Exception ex)

Instruction jInstruction k

Remarque si le bloc trycatch a une instruction return finally srsquoexeacutecute quand mecircme Le flot saute agrave finally puis revient agrave return

Extrait de la documentation de la classe read Method Detail read public abstract int read() throws IOException

Reads the next byte of data from the input stream The value byte is returned as an int in the range 0 to 255 If no byte is available because the end of the stream has been reached the value -1 is returned This method blocks until input data is available the end of the stream is detected or an exception is thrown A subclass must provide an implementation of this method

Returns the next byte of data or -1 if the end of the stream is

reached Throws

IOException - if an IO error occurs

Deux maniegraveres de geacuterer les exceptions la prendre en compte ou lrsquoesquiverimport javaioIOExceptionpublic class TaperTouche

static public void main(String[] args)

Systemoutprintln(Tapez une touche pour terminer le programme)

trySysteminread()catch(IOException e)Systemoutprintln(Une IOException a eacuteteacute deacutetecteacute )

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 15: Gestion des exceptions E/S

Finally pour ce qui srsquoexeacutecute dans tous les cas

Try Instruction 1 Instruction i

catch (Exception ex)

Instruction j finally

Instruction k

Try Instruction 1 Instruction iInstruction k

catch (Exception ex)

Instruction jInstruction k

Remarque si le bloc trycatch a une instruction return finally srsquoexeacutecute quand mecircme Le flot saute agrave finally puis revient agrave return

Extrait de la documentation de la classe read Method Detail read public abstract int read() throws IOException

Reads the next byte of data from the input stream The value byte is returned as an int in the range 0 to 255 If no byte is available because the end of the stream has been reached the value -1 is returned This method blocks until input data is available the end of the stream is detected or an exception is thrown A subclass must provide an implementation of this method

Returns the next byte of data or -1 if the end of the stream is

reached Throws

IOException - if an IO error occurs

Deux maniegraveres de geacuterer les exceptions la prendre en compte ou lrsquoesquiverimport javaioIOExceptionpublic class TaperTouche

static public void main(String[] args)

Systemoutprintln(Tapez une touche pour terminer le programme)

trySysteminread()catch(IOException e)Systemoutprintln(Une IOException a eacuteteacute deacutetecteacute )

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 16: Gestion des exceptions E/S

Extrait de la documentation de la classe read Method Detail read public abstract int read() throws IOException

Reads the next byte of data from the input stream The value byte is returned as an int in the range 0 to 255 If no byte is available because the end of the stream has been reached the value -1 is returned This method blocks until input data is available the end of the stream is detected or an exception is thrown A subclass must provide an implementation of this method

Returns the next byte of data or -1 if the end of the stream is

reached Throws

IOException - if an IO error occurs

Deux maniegraveres de geacuterer les exceptions la prendre en compte ou lrsquoesquiverimport javaioIOExceptionpublic class TaperTouche

static public void main(String[] args)

Systemoutprintln(Tapez une touche pour terminer le programme)

trySysteminread()catch(IOException e)Systemoutprintln(Une IOException a eacuteteacute deacutetecteacute )

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 17: Gestion des exceptions E/S

Deux maniegraveres de geacuterer les exceptions la prendre en compte ou lrsquoesquiverimport javaioIOExceptionpublic class TaperTouche

static public void main(String[] args)

Systemoutprintln(Tapez une touche pour terminer le programme)

trySysteminread()catch(IOException e)Systemoutprintln(Une IOException a eacuteteacute deacutetecteacute )

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 18: Gestion des exceptions E/S

Lrsquoesquiver Il srsquoagit de deacuteclarer que vous lancez lrsquoexception

mecircme si techniquement ce nrsquoest pas vous qui la lancez

public class TaperTouche

static public void main(String[] args) throws IOExceptionSystemoutprintln(Tapez une touche pour terminer le programme)Systeminread()

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 19: Gestion des exceptions E/S

public class TaperTouche

static public void LireClavier throws IOException Systemoutprintln(Tapez une touche pour terminer le

programme)Systeminread()

Public class Main static public void main(String[] args) throws IOException

TaperToucheLireClavier()

Si Main nrsquoesquive pas lrsquoexception ou ne

lrsquoencapsule pas dans un bloc trycatch il y a une erreur de compilation

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 20: Gestion des exceptions E/S

Une RunTime exception peut ecirctre eacutegalement intercepter et deacuteclarer

public class ZeroDivide

static public void main(String[] args)int a = 3 int b = 0trySystemoutprintln(Resultat de la division + ab)Systemoutprintln(Instructions suivant la division)catch(ArithmeticException e)Systemoutprintln(Une exception srsquoest produite (ArithmeticException))Systemoutprintln(Instructions qui suivent le bloc catch)

Maintenant le division par zeacutero ne provoque pas la terminaison du

programme

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 21: Gestion des exceptions E/S

Creacuteer ses propres classes drsquoexception Imposer agrave la classe de deacuteriver de la

classe standard Exception Exemple transmission drsquoun message

au gestionnaire drsquoexception sous forme drsquoune information de type chaicircne

La classe Exception dispose drsquoun constructeur agrave un argument de type String dont on peut reacutecupeacuterer la valeur agrave lrsquoaide de la meacutethode getMessage

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 22: Gestion des exceptions E/S

class MonZeroException extends Exception

public MonZeroException(String e)super(e)

public class laClauseThrows

public static void main (String[] args)trySystemoutprintln(je verifie le nombre donne en argument)LaClauseThrowstest(args)catch (MonZeroException e)Systemoutprintln(egetMessage()) getMessage meacutethode de la classe Throwable

eprintStackTrace() meacutethode de la classe Throwable affiche lrsquoeacutetat de la pile drsquoappels

public static void test(String [] args) throws MonZeroExceptionint n=IntegerparseInt(args[0])if (n==0) throw new MonZeroException(jrsquoai vu un zero)Systemoutprintln(il nrsquoy a pas eu drsquoexception pour zero)

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 23: Gestion des exceptions E/S

Exemple transmission drsquoinformation au constructeur de lrsquoobjet exception

class Point private int xypublic Point(int x int y) throws ErrConst

if ((xlt0) || (ylt0)) throw new ErrConst(xy)thisx =x thisy=y

public void affiche() Systemoutprintln(Coordonneacutees +x+ +y)

class ErrConst extends Exception

public int abspublic int ordErrConst (int abs int ord)

thisabs = abs thisord=ord

public class Exoinfo1

public static void main (String args[]) try

Point a = new Point (14)aaffiche()a = new Point (-35)aaffiche()catch (ErrConst e)

Systemoutprintln(Erreur construction point)Systemoutprintln(coordonnees souhaiteacutees+eabs+

+eord)Systemexit(-1)

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 24: Gestion des exceptions E/S

public class TestExceptions public static void main (String [] args)

String test = nontry

Systemoutprintln(Deacutebut de try)prendreRisque(test)Systemoutprintln(Fin de try)

catch (HorribleException he) Systemoutprintln(Horrible exception)

finally Systemoutprintln(finally)

Systemoutprintln(fin de main)

static void prendreRisque(String test) throws HorribleExeception Systemoutprintln(deacutebut de risque)if (ouiequals(test))

throw new HorribleException()Systemoutprintln(fin de risque)return

Quel est le reacutesultat quand test vaut laquo non raquo et quand test vaut laquo oui raquo

Exercice

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 25: Gestion des exceptions E/S

Geacuterer plusieurs types drsquoexceptions

public class plusieursCatchs public static void main (String[] args)try

Systemoutprintln(je verifie le nombre donne en argument)int n=IntegerparseInt(args[0])if (n==0) throw new ZeroException()if (ngt0) throw new SupAZeroException()if (nlt0) throw new InfAZeroException()catch (ZeroException e)Systemoutprintln(le nombre etait nul)catch (SupAZeroException e)Systemoutprintln(le nombre etait superieur a zero)catch (InfAZeroException e)Systemoutprintln(le nombre etait inferieur a zero)

Les blocs catch doivent ecirctre ordonneacutes du plus petit au plus grand

Cela deacutepend de la hieacuterarchie drsquoheacuteritage

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 26: Gestion des exceptions E/S

public class ZeroException extends Exception

public class SupAZeroException extends Exception

public class InfAZeroException extends Exception

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 27: Gestion des exceptions E/S

Conclusion La gestion des exceptions permet de dissocier

le programme principal de la gestion des erreurs ou des arrecircts brusques du programme

Ce nrsquoest pas une nouvelle structure de controcircle en plus des if while for switch

La gestion des erreurs ralentit consideacuterablement la vitesse du programme Les exceptions doivent rester

exceptionnelles

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 28: Gestion des exceptions E/S

ES

En Java les eacutechanges de donneacutees entre un programme et lrsquoexteacuterieur (autre programme fichier reacuteseau) sont effectueacutes par un laquo flot ou flux (streams en anglais) raquo de donneacutees Un flot permet de transporter (le plus souvent)

seacutequentiellement des donneacutees Les donneacutees sont transporteacutees une par une (ou groupe par groupe) de la premiegravere agrave la derniegravere donneacutee

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 29: Gestion des exceptions E/S

Le cycle drsquoutilisation de lecture ou eacutecriture seacutequentielle drsquoun flot de donneacutees est le suivant 1) Ouverture du flot 2) Tant qursquoil y a des donneacutees agrave lire (ou agrave eacutecrire) on lit (ou on eacutecrit) la donneacutee

suivante dans le flot 3) Fermeture du flot

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 30: Gestion des exceptions E/S

Sources ou destinations de flots Fichier Socket pour eacutechanger des donneacutees sur

un reacuteseau Donneacutees de grandes tailles dans une

base de donneacutees (images par exemple) Pipe entre 2 files drsquoexeacutecution Tableau drsquooctets Chaicircne de caractegraveres URL (adresse Web)1048708 etc

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 31: Gestion des exceptions E/S

LrsquoAPI drsquoES JAVA comprend des flots de communication qui repreacutesentent

des destinations et des sources (fichiers socket reacuteseauhellip)

de traitement ne fonctionne que srsquoils sont chaicircneacutes agrave drsquoautres flots

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 32: Gestion des exceptions E/S

Flux drsquoentreacutee clavier

Pour lire un caractegravere au clavier Systeminread() qui renvoie une valeur de type

byte que lrsquoon convertira en caractegravere par un opeacuterateur cast char c = (char)Systeminread()

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 33: Gestion des exceptions E/S

Pour arriver agrave lire un mot en entier et srsquoarrecircter apregraves que lrsquoutilisateur ait tapeacute ldquoreturnrdquo

char cString chaine = while ((c = (char)Systeminread()) = rsquonrsquo)chaine=chaine+c Ouchar cStringBuffer chaine = new StringBuffer()while ((c = (char)Systeminread()) = rsquonrsquo)chaineappend(c) ouScanner sc = new Scanner(Systemin) classe

ScannerSystemoutprintln(scnext())

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 34: Gestion des exceptions E/S

Flux de fichier Classe javaioFile

Repreacutesente un fichier sur le disque mais ne repreacutesente pas son contenu

Plus preacuteciseacutement un objet file repreacutesente le nom et le chemin drsquoun fichier ou drsquoun reacutepertoire sur le disque

ECOURSJAVAJeutxt

Java distingue les flux binaires des flux textes

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 35: Gestion des exceptions E/S

Exemple drsquoutilisation drsquoun objet file Creacuteer un objet repreacutesentant un fichier

existant File f = new File(rsquorsquoMonprogtxtrsquorsquo)

Creacuteer un reacutepertoire File rep = new File(rsquorsquoJAVArsquorsquo) Repmkdir()

Obtenir le chemin absolu drsquoun fichier ou drsquoun reacutepertoire

Systemoutprintln(repgetAbsolutePath()) hellip

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 36: Gestion des exceptions E/S

import javautilimport javaiopublic class Lecture_Fichier public static void main(String[] args) throws IOExceptionScanner sc = new Scanner(Systemin)Systemoutprintln(Entrez le repertoire ou se trouve le fichier )String dirBuf = scnext()File dir=new File(dirBuf)Systemoutprintln(Entrez le nom du fichier )String fileBuffileBuf = scnext()File fil = new File(dirfileBuf)if (filexists()) Systemoutprintln(Fichier trouveacute)Systemoutprintln(Nom du fichier +filgetName())Systemoutprintln(Chemin du fichier +filgetPath())Systemoutprintln(Chemin absolu +filgetAbsolutePath())Systemoutprintln(Droit de lecture +filcanRead())Systemoutprintln(Droit drsquoeacutecriture +filcanWrite())Systemoutprintln(Fichier supprime +fildelete())

attentionSystemoutprintln(n contenu du reacutepertoire )String listing[] = dirlist()for (int i=0 iltlistinglengthi++) Systemoutprintln(listing[i])else Systemoutprintln(Fichier absent)

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 37: Gestion des exceptions E/S

Opeacuteration de copie drsquoun fichier dans un autre

import javaio dans cette partie on lit le nom du reacutepertoire

sourcepublic class copieFichier public static void main(String args[]) throws

javaioIOExceptionchar chSystemoutprintln(repertoire source )StringBuffer dirBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)dirBufappend(ch)File srcDir=new File(dirBuftoString())if (srcDirexists()) Systemoutprintln( repertoire absent)Systemexit(1) else if (srcDircanRead())Systemoutprintln(repertoire illisible)Systemexit(1)

dans cette partie on lit le nom du fichier source

Systemoutprintln(Entrez le nom du fichier source )

StringBuffer fileBuf = new StringBuffer()

while ((ch = (char)Systeminread()) = rsquonrsquo)

fileBufappend(ch)File srcFile = new

File(srcDirfileBuftoString())if (srcFileexists()) Systemoutprintln(fichier absent)Systemexit(1) else if (srcFilecanRead())Systemoutprintln(fichier illisible)Systemexit(1)

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 38: Gestion des exceptions E/S

lecture du fichier destinationSystemoutprintln(Entrez le nom du fichier

destination )fileBuf = new StringBuffer()while ((ch = (char)Systeminread()) = rsquonrsquo)fileBufappend(ch)File dstFile = new File(srcDirfileBuftoString())if (dstFileexists()) Systemoutprintln(fichier existant)Systemexit(1)

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 39: Gestion des exceptions E/S

ici on copieFileInputStream inStream = new FileInputStream(srcFile)FileOutputStream outStream =

newFileOutputStream(dstFile)while (inStreamavailable()gt0) le nb drsquooctet au pointeur de lecture

outStreamwrite(inStreamread()) eacutecriture seacutequentielle drsquoun octet apregraves lrsquoautre

inStreamclose() on ferme le flux drsquoentreacuteeoutStreamclose() on ferme le flux de sortie FileInputStream FileOutputStream resp ouvre (creacutee) le

fichier speacutecifieacute

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 40: Gestion des exceptions E/S

Classe DataOutputStream Les meacutethodes de la classe

FileOutputStream sont rudimentaires Envoyer sur le flux un octet ou un tableau drsquooctet

La classe DataOutputStream comporte des meacutethodes plus eacutevolueacutees permettant drsquoenvoyer sur un flux une valeur drsquoun type primitif quelconque ie writeInt writeFloathellip

DataOutputStream outStream = new DataOutputStream(new FileOutputStream(dstFile))

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 41: Gestion des exceptions E/S

Exemple creacuteation drsquoun fichier binaire laquo totodat raquo

import javaioimport javautilpublic class Crsfic1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nDataOutputStream sortie = new DataOutputStream(new

FileOutputStream(totodat))do Systemoutprint(donner un entier)

n = scnextInt()Systemoutprintln(n=+n)if (n = 0) sortiewriteInt(n) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 42: Gestion des exceptions E/S

Lecture drsquoun fichier binaireimport javaiopublic class Lecfic1

public static void main(String args[]) throws IOException String nomfichint n=0DataInputStream entree = new DataInputStream(new

FileInputStream(totodat))boolean eof = falsewhile (eof)

try n = entreereadInt() catch (EOFException e)

eof = true

if (eof) Systemoutprintln(n)entreeclose()

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 43: Gestion des exceptions E/S

Ecriture drsquoun fichier texte

Classe FileWriter permet de manipuler un flux texte associeacute agrave un fichier

Meacutethodes permettent drsquoeacutecrire des caractegraveres chaicircnes

Classe PrintWriter possegravede des meacutethodes plus eacutelaboreacutees (print printlnhellip)

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 44: Gestion des exceptions E/S

import javaioimport javautilpublic class Crstxt1

public static void main(String args[]) throws IOException String nomfichScanner sc = new Scanner(Systemin)int nPrintWriter sortie = new PrintWriter(new

FileWriter(tototxt))do

Systemoutprint(donner un entier)n = scnextInt()

if (n = 0) sortieprintln(n+ a pour carre+nn) while (n = 0)sortieclose()Systemoutprintln( Fin de creacuteation )

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 45: Gestion des exceptions E/S

Lecture drsquoun fichier texteimport javaio

public class Lecftxt1 public static void main(String args[]) throws IOException

String ligne

BufferedReader entree = new BufferedReader (new FileReader(tototxt))

boolean eof = falsedo

ligne = entreereadLine()if (ligne = null) Systemoutprintln(ligne) while (ligne = null)entreeclose()

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 46: Gestion des exceptions E/S

Les buffers

Ils fournissent un contenant temporaire pour grouper les donneacutees jusqursquoagrave ce qursquoil soit plein Optimiser les eacutechanges drsquoES Meacutethode flush pour vidage immeacutediat du buffer

(sinon le buffer est videacute quand il est plein) Classes BufferedInput(Output)Stream pour les

fichiers binaires Classes BufferedReader(Writer) pour les

fichiers texte

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 47: Gestion des exceptions E/S

Classe StringTokenizer

Pour acceacuteder agrave chacune des informations drsquoune mecircme ligne Classe StringTokenizer permet de

deacutecouper une ligne en diffeacuterents tokens en fonction drsquoun caractegravere seacuteparateur

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 48: Gestion des exceptions E/S

import javautilimport javaiopublic class Main public static void main(String args[]) throws IOException double d bdouble p = 0String n = nullString st = nullint iStringTokenizer sttBufferedReader in = new BufferedReader(new FileReader(intxt))d = DoubleparseDouble(inreadLine()trim())i = IntegervalueOf(inreadLine()trim())intValue() ou IntparseIntwhile ( (st = inreadLine()) = null) stt = new StringTokenizer(st)p = DoublevalueOf(sttnextToken())doubleValue()b = DoublevalueOf(sttnextToken())doubleValue()n = sttnextToken()inclose()BufferedWriter out = new BufferedWriter(new FileWriter(outtxt))outwrite(ntoString())outnewLine()outwrite(DoubletoString(p))outflush()outclose()

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 49: Gestion des exceptions E/S

Fichier intxt500310 60 item120 100 item230 120 item3

Fichier outtxtItem3300

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 50: Gestion des exceptions E/S

Formatage des nombres

Le package javatext contient toutes sortes de meacutethodes de formatages Classe NumberFormat se trouve dans

ce package

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 51: Gestion des exceptions E/S

Fixer le nombre de deacutecimales

import javatextpublic class Formatage

public static void main (String[] args) double d = 5664324563576927654NumberFormat formateur = new

DecimalFormat(0)String nbr = formateurformat(d)Systemoutprintln(nbr)

Indique le nombrede deacutecimal apregraves la virgule

Reacutesultat 5664324563577

Formater d

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48
Page 52: Gestion des exceptions E/S

Ajouter des virgulesimport javatextpublic class Formatage2

public static void main (String[] args) int d = 566432456NumberFormat formateur =

NumberFormatgetNumberInstance()Systemoutprintln(formateurformat(d))

Sortie 566432456

Classe NumberFormatfournit une instance quisait formater des nombres(ajouter des virgules)

  • Slide 18
  • Slide 22
  • Slide 24
  • Slide 26
  • Slide 33
  • Slide 36
  • Slide 44
  • Slide 48