Upload
libby-reynolds
View
33
Download
3
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
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)