{"id":619,"date":"2022-04-13T23:46:22","date_gmt":"2022-04-13T23:46:22","guid":{"rendered":"https:\/\/www.louismarchand.me\/?page_id=619"},"modified":"2023-09-25T13:46:01","modified_gmt":"2023-09-25T13:46:01","slug":"les-fichiers-en-java","status":"publish","type":"page","link":"https:\/\/www.louismarchand.me\/index.php\/les-fichiers-en-java\/","title":{"rendered":"Les fichiers en Java"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>L&rsquo;utilisation des fichiers en java n\u00e9cessite plusieurs types diff\u00e9rents d&rsquo;objets. Il s&rsquo;agit de m\u00e9canique tr\u00e8s utile afin d&rsquo;incorporer de la persistance de donn\u00e9es dans les programmes, sans avoir besoin de base de donn\u00e9e complexe.<\/p>\n<h2>La classe \u00ab\u00a0File\u00a0\u00bb<\/h2>\n<p>Avant de montrer comment lire et \u00e9crire dans les fichiers, il peut \u00eatre int\u00e9ressant de voir comment obtenir de l&rsquo;information sur les fichiers. Une classe Java existe afin d&rsquo;obtenir des informations sur les fichiers. Il s&rsquo;agit de la classe <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/File.html\" target=\"_blank\" rel=\"noopener\"><strong>java.io.File<\/strong><\/a>.<\/p>\n<p>Il est \u00e0 sp\u00e9cifier qu&rsquo;un objet de type <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/File.html\" target=\"_blank\" rel=\"noopener\"><strong>File<\/strong><\/a> peut \u00eatre cr\u00e9\u00e9 autant pour les fichiers standards que pour les r\u00e9pertoires.<\/p>\n<h3>Constructeur<\/h3>\n<p>Pour cr\u00e9er un objet de type <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/File.html\" target=\"_blank\" rel=\"noopener\"><strong>File<\/strong><\/a> il faut envoyer le nom du fichier en argument du constructeur. Voici un exemple:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lFichier<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"o\">(<\/span><span class=\"s\">\"test.txt\"<\/span><span class=\"o\">);<\/span>\r\n         <span class=\"n\">...<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Il est \u00e9galement possible de concat\u00e9ner deux parties de chemin avec des constructeurs de <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/File.html\" target=\"_blank\" rel=\"noopener\"><strong>File<\/strong><\/a>. Voici des exemples:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lFichier<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/home\/louis\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"test.txt\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">...<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lRepertoire<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/home\/louis\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lFichier<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"o\">(<\/span><span class=\"n\">lRepertoire<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"test.txt\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">...<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<h3>Savoir si le fichier existe<\/h3>\n<p>Pour savoir si un fichier existe, on peut utiliser la m\u00e9thode <strong>exists<\/strong> de la classe <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/File.html\" target=\"_blank\" rel=\"noopener\"><strong>File<\/strong><\/a>. Cette m\u00e9thode retourne une valeur bool\u00e9enne (\u00ab\u00a0True\u00a0\u00bb si le fichier existe et \u00ab\u00a0False\u00a0\u00bb sinon). Par exemple:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lFichier<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"o\">(<\/span><span class=\"s\">\"test.txt\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">.<\/span><span class=\"na\">exists<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Le fichier existe.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Le fichier n'existe pas.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<h3>Droit sur les fichiers<\/h3>\n<p>Dans un syst\u00e8me d&rsquo;exploitation, des m\u00e9canismes de protection de fichiers sont existes qui fait que les programmes ex\u00e9cut\u00e9s par certains utilisateurs auront des droits sp\u00e9cifiques sur diff\u00e9rents fichiers.<\/p>\n<p>Les deux (2) types de protection de fichier existant en java sont les protections de lecture et d&rsquo;\u00e9criture. Afin de valider ces deux (2) types de permission, on peut utiliser les m\u00e9thodes de <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/File.html\" target=\"_blank\" rel=\"noopener\"><strong>File<\/strong><\/a> suivante:<\/p>\n<ul>\n<li>boolean canRead(): Permet de v\u00e9rifier que le fichier peut \u00eatre lu;<\/li>\n<li>boolean canWrite(): Permet de v\u00e9rifier que le fichier peut \u00eatre modifi\u00e9;<\/li>\n<\/ul>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lFichier<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"o\">(<\/span><span class=\"s\">\"test.txt\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">.<\/span><span class=\"na\">canRead<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Le fichier peut \u00eatre lu.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Le fichier ne peut pas \u00eatre lu.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">.<\/span><span class=\"na\">canWrite<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Le fichier peut \u00eatre modifi\u00e9.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Le fichier ne peut pas \u00eatre modifi\u00e9.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<h3>Acc\u00e9der aux adresses des fichiers<\/h3>\n<p>Il existe plusieurs m\u00e9thodes de <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/File.html\" target=\"_blank\" rel=\"noopener\"><strong>File<\/strong><\/a> permettant d&rsquo;obtenir des versions diff\u00e9rentes de l&rsquo;adresse et du nom d&rsquo;un fichier. Voici certaines de ces m\u00e9thodes:<\/p>\n<ul>\n<li>String getPath(): Retourne la m\u00eame cha\u00eene utilis\u00e9e dans l&rsquo;initialisation (adapt\u00e9 au syst\u00e8me).<\/li>\n<li>String getCanonicalPath(): Retourne le chemin absolu d&rsquo;un fichier. Utile lorsqu&rsquo;un chemin relatif (ou un chemin inconnu) est utilis\u00e9 dans la d\u00e9claration.<\/li>\n<li>String getParent(): Retourne le chemin du r\u00e9pertoire parent du fichier. Il est \u00e0 noter qu&rsquo;il existe \u00e9galement \u00ab\u00a0File getParentFile()\u00a0\u00bb qui retourne un objet \u00ab\u00a0File\u00a0\u00bb repr\u00e9sentant le r\u00e9pertoire parent.<\/li>\n<li>String getName(): Retourne seulement la partie fichier du chemin. Par exemple, le \u00ab\u00a0getName()\u00a0\u00bb du fichier \u00ab\u00a0\/home\/louis\/test.txt\u00a0\u00bb retournera \u00ab\u00a0test.txt\u00a0\u00bb. Il est \u00e0 noter que cette m\u00e9thode retourne la m\u00eame chose que \u00ab\u00a0toString()\u00a0\u00bb<\/li>\n<\/ul>\n<h3>Manipulation de r\u00e9pertoires<\/h3>\n<h4>V\u00e9rifier qu&rsquo;un fichier est un r\u00e9pertoire<\/h4>\n<p>Il est possible de s&rsquo;assurer qu&rsquo;un objet de type <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/File.html\" target=\"_blank\" rel=\"noopener\"><strong>File<\/strong><\/a> pointe vers un r\u00e9pertoire avec la m\u00e9thode <strong>isDirectory()<\/strong>.<\/p>\n<h4>Cr\u00e9er un r\u00e9pertoire<\/h4>\n<p>Avec un objet de type <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/File.html\" target=\"_blank\" rel=\"noopener\"><strong>File<\/strong><\/a>, il est possible de cr\u00e9er des r\u00e9pertoires. Pour se faire, on utilise une des m\u00e9thodes suivantes:<\/p>\n<ul>\n<li>mkdir(): Cr\u00e9er un r\u00e9pertoire (le r\u00e9pertoire parent doit exister);<\/li>\n<li>mkdirs(): Cr\u00e9er un r\u00e9pertoire ainsi que ses r\u00e9pertoires parents s&rsquo;ils n&rsquo;existent pas.<\/li>\n<\/ul>\n<p>Par exemple:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lRepertoire1<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/home\/louis\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lRepertoire2<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"o\">(<\/span><span class=\"n\">lRepertoire1<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"test\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span>\r\n                    <span class=\"n\">lRepertoire1<\/span><span class=\"o\">.<\/span><span class=\"na\">exists<\/span><span class=\"o\">()<\/span> <span class=\"o\">&amp;&amp;<\/span>\r\n                    <span class=\"n\">lRepertoire1<\/span><span class=\"o\">.<\/span><span class=\"na\">isDirectory<\/span><span class=\"o\">()<\/span> <span class=\"o\">&amp;&amp;<\/span>\r\n                    <span class=\"n\">lRepertoire1<\/span><span class=\"o\">.<\/span><span class=\"na\">canWrite<\/span><span class=\"o\">()<\/span> <span class=\"o\">&amp;&amp;<\/span>\r\n                    <span class=\"o\">!<\/span><span class=\"n\">lRepertoire2<\/span><span class=\"o\">.<\/span><span class=\"na\">exists<\/span><span class=\"o\">()<\/span>\r\n                <span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">lRepertoire2<\/span><span class=\"o\">.<\/span><span class=\"na\">mkdir<\/span><span class=\"o\">();<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"R\u00e9pertoire cr\u00e9\u00e9\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas cr\u00e9er le r\u00e9pertoire \"<\/span> <span class=\"o\">+<\/span>\r\n                    <span class=\"n\">lRepertoire2<\/span><span class=\"o\">.<\/span><span class=\"na\">getAbsolutePath<\/span><span class=\"o\">());<\/span>\r\n        <span class=\"o\">}<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<h4>Lister les fichiers d&rsquo;un r\u00e9pertoire<\/h4>\n<p>Il est possible de lister tous les fichiers contenues dans un r\u00e9pertoire en utilisant <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/File.html#listFiles()\" rel=\"noopener\" target=\"_blank\">listFiles()<\/a>. Voici un exemple:<\/p>\n<div class=\"highlight\">\n<pre><span><\/span><span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"p\">{<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lRepertoire<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"p\">(<\/span><span class=\"s\">&quot;mon_repertoire&quot;<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">File<\/span><span class=\"o\">[]<\/span> <span class=\"n\">lFichiers<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lRepertoire<\/span><span class=\"p\">.<\/span><span class=\"na\">listFiles<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"n\">File<\/span> <span class=\"n\">lFichier<\/span> <span class=\"p\">:<\/span> <span class=\"n\">lFichiers<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"p\">.<\/span><span class=\"na\">getName<\/span><span class=\"p\">());<\/span>\r\n        <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<h2>La manipulation de fichiers<\/h2>\n<p>Java permet plusieurs m\u00e9canismes afin de manipuler des fichiers. Peu importe le type de manipulation que vous effectuons, nous pouvons utiliser la classe <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/File.html\" target=\"_blank\" rel=\"noopener\"><strong>File<\/strong><\/a> afin d&rsquo;ouvrir un fichier. Malgr\u00e9 que les m\u00e9canismes de manipulation de fichier de java ne l&rsquo;exigent pas (il est g\u00e9n\u00e9ralement possible d&rsquo;utiliser directement l&rsquo;adresse du fichier au lieu d&rsquo;un objet File), c&rsquo;est tout de m\u00eame un bon r\u00e9flex puisque \u00e7a permet de s&rsquo;assurer que le fichier est valide avant de le manipuler.<\/p>\n<p>\u00c9galement, peu importe le type de manipulation \u00e0 effectuer, il est important de ne pas oublier de fermer le fichier lorsqu&rsquo;il n&rsquo;est plus n\u00e9cessaire. L&rsquo;oublie de cette r\u00e8gle peut causer des bugs ou faire en sorte que des fichiers soient bloqu\u00e9s par le syst\u00e8me d&rsquo;exploitation.<\/p>\n<h3>Les types de fichiers<\/h3>\n<p>En Java (comme dans pas mal tous les autres langages), il est possible de g\u00e9rer des fichiers textes ou des fichiers binaires. Nous nous concentrerons premi\u00e8rement sur les fichiers textes et nous verrons plus bas comment g\u00e9rer des fichiers binaires.<\/p>\n<h4>Les fichiers textes<\/h4>\n<p>Lors de la gestion de fichiers texte, Java s&rsquo;arrange pour g\u00e9rer par lui-m\u00eame l&rsquo;encodage des cha\u00eenes de caract\u00e8re (UTF, Ascii, etc.) Il est donc assez simple de g\u00e9rer ce type de fichier. Par contre, ce type de fichier a moins de fonctionnalit\u00e9.<\/p>\n<h5>\u00c9crire dans un fichier texte<\/h5>\n<p>Tout comme la lecture dans un fichier texte n\u00e9cessite un objet sp\u00e9cial de type Scanner, \u00e9crire dans un fichier texte n\u00e9cessite un objet sp\u00e9cial de type <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/FileWriter.html\" target=\"_blank\" rel=\"noopener\"><strong>FileWriter<\/strong><\/a>. Le FileWriter permet d&rsquo;\u00e9crire dans le fichier texte en envoyant le String \u00e0 \u00e9crire \u00e0 la m\u00e9thode <strong>write<\/strong>. Il est important de placer l&rsquo;utilisation du <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/FileWriter.html\" target=\"_blank\" rel=\"noopener\"><strong>FileWriter<\/strong><\/a> dans un \u00ab\u00a0try&#8230;catch\u00a0\u00bb qui g\u00e8re une exception de type <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/IOException.html\" target=\"_blank\" rel=\"noopener\"><strong>IOException<\/strong><\/a> (ou de placer un \u00ab\u00a0throws\u00a0\u00bb dans la signature de la m\u00e9thode). Voici un exemple:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.IOException<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.FileWriter<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lFichier<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"o\">(<\/span><span class=\"s\">\"test.txt\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(!<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">.<\/span><span class=\"na\">exists<\/span><span class=\"o\">()<\/span> <span class=\"o\">||<\/span> <span class=\"n\">lFichier<\/span><span class=\"o\">.<\/span><span class=\"na\">canWrite<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">FileWriter<\/span> <span class=\"n\">lWriter<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">FileWriter<\/span><span class=\"o\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"n\">lWriter<\/span><span class=\"o\">.<\/span><span class=\"na\">write<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Salut\\n\"<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"n\">lWriter<\/span><span class=\"o\">.<\/span><span class=\"na\">close<\/span><span class=\"o\">();<\/span>\r\n            <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"n\">IOException<\/span> <span class=\"n\">lException<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en \u00e9criture.\"<\/span><span class=\"o\">);<\/span>\r\n            <span class=\"o\">}<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en \u00e9criture.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<h5>Lire un fichier texte<\/h5>\n<p>Pour lire un fichier, il faut utiliser un <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/util\/Scanner.html\" target=\"_blank\" rel=\"noopener\"><strong>Scanner<\/strong><\/a>. La gestion de ce type de scanner est similaire \u00e0 la lecture d&rsquo;entr\u00e9e utilisateur au clavier. \u00c0 noter que pour savoir s&rsquo;il y a d&rsquo;autres informations \u00e0 lire, on peut utiliser les m\u00e9thodes qui d\u00e9butent par \u00ab\u00a0hasNext&#8230;()\u00a0\u00bb (par exemple, \u00ab\u00a0hasNextLine()\u00a0\u00bb, \u00ab\u00a0hasNextInt()\u00a0\u00bb, etc.) Il est important de placer l&rsquo;utilisation du <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/util\/Scanner.html\" target=\"_blank\" rel=\"noopener\"><strong>Scanner<\/strong><\/a> dans un \u00ab\u00a0try&#8230;catch\u00a0\u00bb qui g\u00e8re une exception de type <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/FileNotFoundException.html\" target=\"_blank\" rel=\"noopener\"><strong>FileNotFoundException<\/strong><\/a> (ou de placer un \u00ab\u00a0throws\u00a0\u00bb dans la signature de la m\u00e9thode). Par exemple:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.FileNotFoundException<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.Scanner<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lFichier<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"o\">(<\/span><span class=\"s\">\"test.txt\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">.<\/span><span class=\"na\">canRead<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">Scanner<\/span> <span class=\"n\">lScanner<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Scanner<\/span><span class=\"o\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"k\">while<\/span> <span class=\"o\">(<\/span><span class=\"n\">lScanner<\/span><span class=\"o\">.<\/span><span class=\"na\">hasNextLine<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\r\n                    <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"n\">lScanner<\/span><span class=\"o\">.<\/span><span class=\"na\">nextLine<\/span><span class=\"o\">());<\/span>\r\n                <span class=\"o\">}<\/span>\r\n                <span class=\"n\">lScanner<\/span><span class=\"o\">.<\/span><span class=\"na\">close<\/span><span class=\"o\">();<\/span>\r\n            <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"n\">FileNotFoundException<\/span> <span class=\"n\">lException<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en lecture.\"<\/span><span class=\"o\">);<\/span>\r\n            <span class=\"o\">}<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en lecture.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<h4>Les fichiers binaires<\/h4>\n<p>En fait, il n&rsquo;y a pas r\u00e9ellement deux types de fichiers. Les fichiers binaires correspondent \u00e0 tous les types de fichiers, sans exception. Les fichiers textes correspondent autant \u00e0 des fichiers binaires que n&rsquo;importe quels autres fichiers. On devrait plus dire qu&rsquo;on manipule un fichier texte de mani\u00e8re texte ou de mani\u00e8re binaire.<\/p>\n<p>Donc, les fichiers binaires sont tous les types de fichiers existants. La manipulation de ce type de fichier est souvent utilis\u00e9e pour stocker des informations ayant une repr\u00e9sentation tr\u00e8s num\u00e9rique. Par exemple, les fichiers d&rsquo;images, correspondant g\u00e9n\u00e9ralement \u00e0 des listes de valeurs de pixels (compress\u00e9es ou non), sont stock\u00e9s de mani\u00e8re binaire. Il en est de m\u00eame pour les fichiers vid\u00e9os, les fichiers audio, les ex\u00e9cutables natifs, etc.<\/p>\n<p>L&rsquo;avantage de traiter les fichiers de mani\u00e8re binaire est que cela permet un contr\u00f4le absolu des informations stock\u00e9es dans le fichier. Il est important de comprendre que toute manipulation texte d&rsquo;un fichier est encod\u00e9e et d\u00e9cod\u00e9e en temps r\u00e9el par les librairies en fonction d&rsquo;un encodage standard (Ascii, Latin, UTF, etc.)<\/p>\n<p>Puisque Java n&rsquo;a pas \u00e9t\u00e9 con\u00e7u pour traiter des pointeurs et des plages d&rsquo;adresses binaires, il est n\u00e9cessaire d&rsquo;utiliser un objet de type <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/nio\/ByteBuffer.html\" target=\"_blank\" rel=\"noopener\"><strong>ByteBuffer<\/strong><\/a> afin de transf\u00e9rer des valeurs Java en forme binaire.<\/p>\n<h5>\u00c9crire dans un fichier binaire<\/h5>\n<p>\u00c9crire de mani\u00e8re binaire dans un fichier n\u00e9cessite l&rsquo;utilisation d&rsquo;un <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/FileOutputStream.html\" target=\"_blank\" rel=\"noopener\"><strong>FileOutputStream<\/strong><\/a>. Il faut effectuer un <strong>write<\/strong> pour \u00e9crire une suite d&rsquo;octet. Il faut envoyer un tableau (\u00ab\u00a0Array\u00a0\u00bb) de \u00ab\u00a0byte\u00a0\u00bb (ou \u00ab\u00a0byte[]\u00a0\u00bb). On utilise g\u00e9n\u00e9ralement la m\u00e9thode <strong>array()<\/strong> de <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/nio\/ByteBuffer.html\" target=\"_blank\" rel=\"noopener\"><strong>ByteBuffer<\/strong><\/a>. Voici un exemple:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.FileOutputStream<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.IOException<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.OutputStream<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.nio.ByteBuffer<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.ArrayList<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.List<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"n\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Integer<\/span><span class=\"o\">&gt;<\/span> <span class=\"nf\">fibonnaci<\/span><span class=\"o\">(<\/span><span class=\"kt\">int<\/span> <span class=\"n\">aNombre<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"kt\">int<\/span> <span class=\"n\">lElement1<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"o\">,<\/span> <span class=\"n\">lElement2<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"o\">,<\/span> <span class=\"n\">i<\/span><span class=\"o\">,<\/span> <span class=\"n\">lElementTemporaire<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"n\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Integer<\/span><span class=\"o\">&gt;<\/span> <span class=\"n\">lResultat<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">ArrayList<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Integer<\/span><span class=\"o\">&gt;(<\/span><span class=\"n\">aNombre<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">aNombre<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">lResultat<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"n\">Integer<\/span><span class=\"o\">.<\/span><span class=\"na\">valueOf<\/span><span class=\"o\">(<\/span><span class=\"n\">lElement1<\/span><span class=\"o\">));<\/span>\r\n        <span class=\"o\">}<\/span>\r\n        <span class=\"k\">for<\/span> <span class=\"o\">(<\/span><span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"o\">;<\/span> <span class=\"n\">i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">aNombre<\/span><span class=\"o\">;<\/span> <span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"n\">i<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">lResultat<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"n\">Integer<\/span><span class=\"o\">.<\/span><span class=\"na\">valueOf<\/span><span class=\"o\">(<\/span><span class=\"n\">lElement2<\/span><span class=\"o\">));<\/span>\r\n            <span class=\"n\">lElementTemporaire<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lElement2<\/span><span class=\"o\">;<\/span>\r\n            <span class=\"n\">lElement2<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lElement2<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lElement1<\/span><span class=\"o\">;<\/span>\r\n            <span class=\"n\">lElement1<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lElementTemporaire<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"o\">}<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">lResultat<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"nf\">Programme<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lFichier<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"o\">(<\/span><span class=\"s\">\"test.bin\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(!<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">.<\/span><span class=\"na\">exists<\/span><span class=\"o\">()<\/span> <span class=\"o\">||<\/span> <span class=\"n\">lFichier<\/span><span class=\"o\">.<\/span><span class=\"na\">canWrite<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">OutputStream<\/span> <span class=\"n\">lWriter<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">FileOutputStream<\/span><span class=\"o\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"n\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Integer<\/span><span class=\"o\">&gt;<\/span> <span class=\"n\">lFibonnaci<\/span> <span class=\"o\">=<\/span> <span class=\"n\">fibonnaci<\/span><span class=\"o\">(<\/span><span class=\"mi\">10<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"k\">for<\/span> <span class=\"o\">(<\/span><span class=\"n\">Integer<\/span> <span class=\"n\">lElement<\/span> <span class=\"o\">:<\/span> <span class=\"n\">lFibonnaci<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                    <span class=\"n\">ByteBuffer<\/span> <span class=\"n\">lBuffer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ByteBuffer<\/span><span class=\"o\">.<\/span><span class=\"na\">allocate<\/span><span class=\"o\">(<\/span><span class=\"mi\">4<\/span><span class=\"o\">);<\/span> <span class=\"c1\">\/\/ Un int est de 4 octets.<\/span>\r\n                    <span class=\"n\">lBuffer<\/span><span class=\"o\">.<\/span><span class=\"na\">putInt<\/span><span class=\"o\">(<\/span><span class=\"n\">lElement<\/span><span class=\"o\">.<\/span><span class=\"na\">intValue<\/span><span class=\"o\">());<\/span>\r\n                    <span class=\"n\">lWriter<\/span><span class=\"o\">.<\/span><span class=\"na\">write<\/span><span class=\"o\">(<\/span><span class=\"n\">lBuffer<\/span><span class=\"o\">.<\/span><span class=\"na\">array<\/span><span class=\"o\">());<\/span>\r\n                <span class=\"o\">}<\/span>\r\n                <span class=\"n\">lWriter<\/span><span class=\"o\">.<\/span><span class=\"na\">close<\/span><span class=\"o\">();<\/span>\r\n            <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"n\">IOException<\/span> <span class=\"n\">lException<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en \u00e9criture.\"<\/span><span class=\"o\">);<\/span>\r\n            <span class=\"o\">}<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en \u00e9criture.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">new<\/span> <span class=\"n\">Programme<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<h5>Lecture dans un fichier binaire<\/h5>\n<p>De mani\u00e8re similaire \u00e0 l&rsquo;\u00e9criture d&rsquo;un fichier de mani\u00e8re binaire, lire un fichier de mani\u00e8re binaire n\u00e9cessite l&rsquo;utilisation d&rsquo;un <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/FileInputStream.html\" target=\"_blank\" rel=\"noopener\"><strong>FileInputStream<\/strong><\/a>. Il faut effectuer un <strong>read<\/strong> pour lire une suite d&rsquo;octet dans un tableau de \u00ab\u00a0byte\u00a0\u00bb. Afin de convertir ce tableau de \u00ab\u00a0byte\u00a0\u00bb en d&rsquo;autres type de donn\u00e9e (\u00ab\u00a0int\u00a0\u00bb, \u00ab\u00a0float\u00a0\u00bb, etc.), il faut utiliser (en g\u00e9n\u00e9ral), la m\u00e9thode <strong>wrap(tableau)<\/strong> de <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/nio\/ByteBuffer.html\" target=\"_blank\" rel=\"noopener\"><strong>ByteBuffer<\/strong><\/a> et utiliser les bons \u00ab\u00a0getter\u00a0\u00bb afin d&rsquo;avoir le bon type. Voici un exemple:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.FileInputStream<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.IOException<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.InputStream<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.nio.ByteBuffer<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.ArrayList<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.List<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"n\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Integer<\/span><span class=\"o\">&gt;<\/span> <span class=\"nf\">fibonnaci<\/span><span class=\"o\">(<\/span><span class=\"kt\">int<\/span> <span class=\"n\">aNombre<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"kt\">int<\/span> <span class=\"n\">lElement1<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"o\">,<\/span> <span class=\"n\">lElement2<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"o\">,<\/span> <span class=\"n\">i<\/span><span class=\"o\">,<\/span> <span class=\"n\">lElementTemporaire<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"n\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Integer<\/span><span class=\"o\">&gt;<\/span> <span class=\"n\">lResultat<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">ArrayList<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Integer<\/span><span class=\"o\">&gt;(<\/span><span class=\"n\">aNombre<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">aNombre<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">0<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">lResultat<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"n\">Integer<\/span><span class=\"o\">.<\/span><span class=\"na\">valueOf<\/span><span class=\"o\">(<\/span><span class=\"n\">lElement1<\/span><span class=\"o\">));<\/span>\r\n        <span class=\"o\">}<\/span>\r\n        <span class=\"k\">for<\/span> <span class=\"o\">(<\/span><span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"o\">;<\/span> <span class=\"n\">i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">aNombre<\/span><span class=\"o\">;<\/span> <span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"n\">i<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">lResultat<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"n\">Integer<\/span><span class=\"o\">.<\/span><span class=\"na\">valueOf<\/span><span class=\"o\">(<\/span><span class=\"n\">lElement2<\/span><span class=\"o\">));<\/span>\r\n            <span class=\"n\">lElementTemporaire<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lElement2<\/span><span class=\"o\">;<\/span>\r\n            <span class=\"n\">lElement2<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lElement2<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lElement1<\/span><span class=\"o\">;<\/span>\r\n            <span class=\"n\">lElement1<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lElementTemporaire<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"o\">}<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">lResultat<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"nf\">Programme<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lFichier<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"o\">(<\/span><span class=\"s\">\"test.bin\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"kt\">int<\/span> <span class=\"n\">lValeur<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"kt\">boolean<\/span> <span class=\"n\">lFirst<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">true<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"kt\">byte<\/span><span class=\"o\">[]<\/span> <span class=\"n\">lByteArray<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"kt\">byte<\/span><span class=\"o\">[<\/span><span class=\"mi\">4<\/span><span class=\"o\">];<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">.<\/span><span class=\"na\">canRead<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">InputStream<\/span> <span class=\"n\">lReader<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">FileInputStream<\/span><span class=\"o\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"k\">while<\/span><span class=\"o\">(<\/span><span class=\"n\">lReader<\/span><span class=\"o\">.<\/span><span class=\"na\">available<\/span><span class=\"o\">()<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">3<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                    <span class=\"n\">lReader<\/span><span class=\"o\">.<\/span><span class=\"na\">read<\/span><span class=\"o\">(<\/span><span class=\"n\">lByteArray<\/span><span class=\"o\">);<\/span>\r\n                    <span class=\"n\">ByteBuffer<\/span> <span class=\"n\">lBuffer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ByteBuffer<\/span><span class=\"o\">.<\/span><span class=\"na\">wrap<\/span><span class=\"o\">(<\/span><span class=\"n\">lByteArray<\/span><span class=\"o\">);<\/span>\r\n                    <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">lFirst<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                        <span class=\"n\">lFirst<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"o\">;<\/span>\r\n                    <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n                        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">print<\/span><span class=\"o\">(<\/span><span class=\"s\">\", \"<\/span><span class=\"o\">);<\/span>\r\n                    <span class=\"o\">}<\/span>\r\n                    <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">print<\/span><span class=\"o\">(<\/span><span class=\"n\">lBuffer<\/span><span class=\"o\">.<\/span><span class=\"na\">getInt<\/span><span class=\"o\">());<\/span>\r\n                <span class=\"o\">}<\/span>\r\n                <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">print<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\\n\"<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"n\">lReader<\/span><span class=\"o\">.<\/span><span class=\"na\">close<\/span><span class=\"o\">();<\/span>\r\n            <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"n\">IOException<\/span> <span class=\"n\">lException<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en lecture.\"<\/span><span class=\"o\">);<\/span>\r\n            <span class=\"o\">}<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en lecture.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"o\">}<\/span>\r\n\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">new<\/span> <span class=\"n\">Programme<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<h5>\u00c0 propos des \u00ab\u00a0little\/big endian\u00a0\u00bb<\/h5>\n<p>Parfois, les protocoles utilis\u00e9s dans fichiers binaires n\u00e9cessites la lecture de champs \u00e9crits en \u00ab\u00a0little endian\u00a0\u00bb au lieu d&rsquo;en \u00ab\u00a0big endian\u00a0\u00bb. Par d\u00e9faut, un <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/nio\/ByteBuffer.html\" target=\"_blank\" rel=\"noopener\"><strong>ByteBuffer<\/strong><\/a> utilise l&rsquo;ordre des octets par \u00ab\u00a0big endian\u00a0\u00bb (donc, dans l&rsquo;ordre de lecture naturel). Afin de changer l&rsquo;ordre de repr\u00e9sentation des octets dans un ByteBuffer, il faut utiliser la m\u00e9thode <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/nio\/ByteBuffer.html#order(java.nio.ByteOrder)\" target=\"_blank\" rel=\"noopener\"><strong>order<\/strong><\/a> avec une des constantes de la classe <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/nio\/ByteOrder.html\" target=\"_blank\" rel=\"noopener\"><strong>ByteOrder<\/strong><\/a>. Par exemple, voici un programme qui inscrit dans un fichier un entier en \u00ab\u00a0little endian\u00a0\u00bb et un second int en \u00ab\u00a0big endian\u00a0\u00bb:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"p\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.FileOutputStream<\/span><span class=\"p\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.IOException<\/span><span class=\"p\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.OutputStream<\/span><span class=\"p\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.nio.ByteBuffer<\/span><span class=\"p\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.nio.ByteOrder<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"p\">{<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lFichier<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"p\">(<\/span><span class=\"s\">\"test.bin\"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">ByteBuffer<\/span> <span class=\"n\">lBuffer<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"kt\">int<\/span> <span class=\"n\">lEntier1<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"kt\">int<\/span> <span class=\"n\">lEntier2<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">2<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"n\">OutputStream<\/span> <span class=\"n\">lStream<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">FileOutputStream<\/span><span class=\"p\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"n\">lBuffer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ByteBuffer<\/span><span class=\"p\">.<\/span><span class=\"na\">allocate<\/span><span class=\"p\">(<\/span><span class=\"mi\">4<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"n\">lBuffer<\/span><span class=\"p\">.<\/span><span class=\"na\">order<\/span><span class=\"p\">(<\/span><span class=\"n\">ByteOrder<\/span><span class=\"p\">.<\/span><span class=\"na\">LITTLE_ENDIAN<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"n\">lBuffer<\/span><span class=\"p\">.<\/span><span class=\"na\">putInt<\/span><span class=\"p\">(<\/span><span class=\"n\">lEntier1<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"n\">lStream<\/span><span class=\"p\">.<\/span><span class=\"na\">write<\/span><span class=\"p\">(<\/span><span class=\"n\">lBuffer<\/span><span class=\"p\">.<\/span><span class=\"na\">array<\/span><span class=\"p\">());<\/span>\r\n            <span class=\"n\">lBuffer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ByteBuffer<\/span><span class=\"p\">.<\/span><span class=\"na\">allocate<\/span><span class=\"p\">(<\/span><span class=\"mi\">4<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"n\">lBuffer<\/span><span class=\"p\">.<\/span><span class=\"na\">order<\/span><span class=\"p\">(<\/span><span class=\"n\">ByteOrder<\/span><span class=\"p\">.<\/span><span class=\"na\">BIG_ENDIAN<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"n\">lBuffer<\/span><span class=\"p\">.<\/span><span class=\"na\">putInt<\/span><span class=\"p\">(<\/span><span class=\"n\">lEntier2<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"n\">lStream<\/span><span class=\"p\">.<\/span><span class=\"na\">write<\/span><span class=\"p\">(<\/span><span class=\"n\">lBuffer<\/span><span class=\"p\">.<\/span><span class=\"na\">array<\/span><span class=\"p\">());<\/span>\r\n            <span class=\"n\">lStream<\/span><span class=\"p\">.<\/span><span class=\"na\">close<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"n\">IOException<\/span> <span class=\"n\">laException<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Ne peut pas \u00e9crire dans le fichier.\"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Le r\u00e9sultat obtenu dans le fichier \u00ab\u00a0test.bin\u00a0\u00bb est le suivant (affich\u00e9 avec un visualisateur hexad\u00e9cimal):<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-638\" src=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2022\/04\/Endians.png\" alt=\"\" width=\"300\" height=\"112\" srcset=\"https:\/\/www.louismarchand.me\/wp-content\/uploads\/2022\/04\/Endians.png 331w, https:\/\/www.louismarchand.me\/wp-content\/uploads\/2022\/04\/Endians-300x112.png 300w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Pour relire ces deux entiers, on pourrait utiliser un programme comme le suivant:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"p\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.FileInputStream<\/span><span class=\"p\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.IOException<\/span><span class=\"p\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.InputStream<\/span><span class=\"p\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.nio.ByteBuffer<\/span><span class=\"p\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.nio.ByteOrder<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"p\">{<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lFichier<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"p\">(<\/span><span class=\"s\">\"test.bin\"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">ByteBuffer<\/span> <span class=\"n\">lBuffer<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"kt\">byte<\/span><span class=\"o\">[]<\/span> <span class=\"n\">lBytes<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"kt\">byte<\/span><span class=\"o\">[<\/span><span class=\"mi\">4<\/span><span class=\"o\">]<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"kt\">int<\/span> <span class=\"n\">lEntier1<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"kt\">int<\/span> <span class=\"n\">lEntier2<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">2<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"n\">InputStream<\/span> <span class=\"n\">lStream<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">FileInputStream<\/span><span class=\"p\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"n\">lStream<\/span><span class=\"p\">.<\/span><span class=\"na\">read<\/span><span class=\"p\">(<\/span><span class=\"n\">lBytes<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"n\">lBuffer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ByteBuffer<\/span><span class=\"p\">.<\/span><span class=\"na\">wrap<\/span><span class=\"p\">(<\/span><span class=\"n\">lBytes<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"n\">lBuffer<\/span><span class=\"p\">.<\/span><span class=\"na\">order<\/span><span class=\"p\">(<\/span><span class=\"n\">ByteOrder<\/span><span class=\"p\">.<\/span><span class=\"na\">LITTLE_ENDIAN<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Le premier entier: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lBuffer<\/span><span class=\"p\">.<\/span><span class=\"na\">getInt<\/span><span class=\"p\">());<\/span>\r\n            <span class=\"n\">lStream<\/span><span class=\"p\">.<\/span><span class=\"na\">read<\/span><span class=\"p\">(<\/span><span class=\"n\">lBytes<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"n\">lBuffer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ByteBuffer<\/span><span class=\"p\">.<\/span><span class=\"na\">wrap<\/span><span class=\"p\">(<\/span><span class=\"n\">lBytes<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"n\">lBuffer<\/span><span class=\"p\">.<\/span><span class=\"na\">order<\/span><span class=\"p\">(<\/span><span class=\"n\">ByteOrder<\/span><span class=\"p\">.<\/span><span class=\"na\">BIG_ENDIAN<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Le second entier: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lBuffer<\/span><span class=\"p\">.<\/span><span class=\"na\">getInt<\/span><span class=\"p\">());<\/span>\r\n            <span class=\"n\">lStream<\/span><span class=\"p\">.<\/span><span class=\"na\">close<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"p\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"n\">IOException<\/span> <span class=\"n\">laException<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Ne peut pas lire dans le fichier.\"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<h5>Stocker et lire des Strings<\/h5>\n<p>L&rsquo;utilisation du ByteBuffer fonctionne correctement pour stocker et charger des types primitifs (int, float, etc.), mais pas pour des Objets complexes. Stocker et charger un Objet complexe n\u00e9cessite des m\u00e9canismes que nous ne verrons pas ici. Par contre, stocker et lire une cha\u00eene de caract\u00e8re se fait plus facilement que pour les autres types d&rsquo;objets.<\/p>\n<h6>Stocker des objets String<\/h6>\n<p>Pour stocker une chaine de caract\u00e8re dans un fichier on peut simplement utiliser la m\u00e9thode <strong>getBytes<\/strong> de la classe String.<\/p>\n<p>Voici un exemple minimaliste:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.FileOutputStream<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.IOException<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.OutputStream<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"nf\">Programme<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lFichier<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"o\">(<\/span><span class=\"s\">\"test.bin\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">String<\/span> <span class=\"n\">lChaine<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"Bonjour \u00e0 tout le monde\"<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(!<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">.<\/span><span class=\"na\">exists<\/span><span class=\"o\">()<\/span> <span class=\"o\">||<\/span> <span class=\"n\">lFichier<\/span><span class=\"o\">.<\/span><span class=\"na\">canWrite<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">OutputStream<\/span> <span class=\"n\">lWriter<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">FileOutputStream<\/span><span class=\"o\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"n\">lWriter<\/span><span class=\"o\">.<\/span><span class=\"na\">write<\/span><span class=\"o\">(<\/span><span class=\"n\">lChaine<\/span><span class=\"o\">.<\/span><span class=\"na\">getBytes<\/span><span class=\"o\">());<\/span>\r\n                <span class=\"n\">lWriter<\/span><span class=\"o\">.<\/span><span class=\"na\">close<\/span><span class=\"o\">();<\/span>\r\n            <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"n\">IOException<\/span> <span class=\"n\">lException<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en \u00e9criture.\"<\/span><span class=\"o\">);<\/span>\r\n            <span class=\"o\">}<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en \u00e9criture.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">new<\/span> <span class=\"n\">Programme<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Par contre, si nous souhaitons stocker plsieurs cha\u00eene de caract\u00e8res dans un m\u00eame fichier, il peut \u00eatre difficile savoir o\u00f9 se termine une cha\u00eene et o\u00f9 d\u00e9bute une autre. Pour se faire, il faut utiliser un protocol. Voici un exemple dans lequel un protocol permettant de stocker plus d&rsquo;une cha\u00eene est utilis\u00e9:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.FileOutputStream<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.IOException<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.OutputStream<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.nio.ByteBuffer<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.ArrayList<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.List<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"kd\">private<\/span> <span class=\"n\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">String<\/span><span class=\"o\">&gt;<\/span> <span class=\"nf\">listeChaines<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">String<\/span><span class=\"o\">&gt;<\/span> <span class=\"n\">lResultat<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">ArrayList<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">String<\/span><span class=\"o\">&gt;(<\/span><span class=\"mi\">10<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lResultat<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"s\">\"La cha\u00eene 0\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lResultat<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Une belle cha\u00eene 1\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lResultat<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Toute une cha\u00eene 2\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lResultat<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"s\">\"C'est la cha\u00eene 3\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lResultat<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ici la cha\u00eene 4\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lResultat<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Super cha\u00eene 5\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lResultat<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Super Grosse et dodu cha\u00eene 6\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lResultat<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"s\">\"La ch\u00eeane 7 avec une erreur\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lResultat<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"s\">\"La cha\u00eene huit\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lResultat<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"s\">\"La derni\u00e8re cha\u00eene 9\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">lResultat<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"nf\">Programme<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lFichier<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"o\">(<\/span><span class=\"s\">\"test.bin\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(!<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">.<\/span><span class=\"na\">exists<\/span><span class=\"o\">()<\/span> <span class=\"o\">||<\/span> <span class=\"n\">lFichier<\/span><span class=\"o\">.<\/span><span class=\"na\">canWrite<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">OutputStream<\/span> <span class=\"n\">lWriter<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">FileOutputStream<\/span><span class=\"o\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"n\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">String<\/span><span class=\"o\">&gt;<\/span> <span class=\"n\">lListeChaines<\/span> <span class=\"o\">=<\/span> <span class=\"n\">listeChaines<\/span><span class=\"o\">();<\/span>\r\n                <span class=\"k\">for<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span> <span class=\"n\">lChaine<\/span> <span class=\"o\">:<\/span> <span class=\"n\">lListeChaines<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                    <span class=\"kt\">byte<\/span><span class=\"o\">[]<\/span> <span class=\"n\">lChaineBytes<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lChaine<\/span><span class=\"o\">.<\/span><span class=\"na\">getBytes<\/span><span class=\"o\">();<\/span>\r\n                    <span class=\"n\">ByteBuffer<\/span> <span class=\"n\">lBuffer<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ByteBuffer<\/span><span class=\"o\">.<\/span><span class=\"na\">allocate<\/span><span class=\"o\">(<\/span><span class=\"mi\">4<\/span><span class=\"o\">);<\/span>\r\n                    <span class=\"n\">lBuffer<\/span><span class=\"o\">.<\/span><span class=\"na\">putInt<\/span><span class=\"o\">(<\/span><span class=\"n\">lChaineBytes<\/span><span class=\"o\">.<\/span><span class=\"na\">length<\/span><span class=\"o\">);<\/span>\r\n                    <span class=\"n\">lWriter<\/span><span class=\"o\">.<\/span><span class=\"na\">write<\/span><span class=\"o\">(<\/span><span class=\"n\">lBuffer<\/span><span class=\"o\">.<\/span><span class=\"na\">array<\/span><span class=\"o\">());<\/span>\r\n                    <span class=\"n\">lWriter<\/span><span class=\"o\">.<\/span><span class=\"na\">write<\/span><span class=\"o\">(<\/span><span class=\"n\">lChaineBytes<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"o\">}<\/span>\r\n                <span class=\"n\">lWriter<\/span><span class=\"o\">.<\/span><span class=\"na\">close<\/span><span class=\"o\">();<\/span>\r\n            <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"n\">IOException<\/span> <span class=\"n\">lException<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en \u00e9criture.\"<\/span><span class=\"o\">);<\/span>\r\n            <span class=\"o\">}<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en \u00e9criture.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">new<\/span> <span class=\"n\">Programme<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Dans cet exemple, le nombre d&rsquo;octets de la cha\u00eene est stock\u00e9 avant de stocker la cha\u00eene en question. Ceci permettra \u00e0 un programme qui doit recr\u00e9er la liste de cha\u00eenes d&rsquo;origine de s\u00e9parer correctement les cha\u00eenes contenues dans le fichier (voir exemple plus bas).<\/p>\n<h6>Lire des objets String<\/h6>\n<p>Cr\u00e9er un String \u00e0 partir d&rsquo;un tableau de \u00ab\u00a0byte\u00a0\u00bb est tr\u00e8s simple puisque la classe String a un <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/lang\/String.html#String(byte[])\" target=\"_blank\" rel=\"noopener\">constructeur<\/a> servant exclusivement \u00e0 cela. Voici un exemple qui peut \u00eatre utilis\u00e9 avec le fichier contenu dans le premier exemple de la section pr\u00e9c\u00e9dente (l&rsquo;exemple minimaliste):<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.FileInputStream<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.IOException<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.InputStream<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"nf\">Programme<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lFichier<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"o\">(<\/span><span class=\"s\">\"test.bin\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">.<\/span><span class=\"na\">canRead<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">InputStream<\/span> <span class=\"n\">lReader<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">FileInputStream<\/span><span class=\"o\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"kt\">byte<\/span><span class=\"o\">[]<\/span> <span class=\"n\">lChaineBytes<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"kt\">byte<\/span><span class=\"o\">[<\/span><span class=\"n\">lReader<\/span><span class=\"o\">.<\/span><span class=\"na\">available<\/span><span class=\"o\">()];<\/span>\r\n                <span class=\"n\">lReader<\/span><span class=\"o\">.<\/span><span class=\"na\">read<\/span><span class=\"o\">(<\/span><span class=\"n\">lChaineBytes<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"n\">String<\/span> <span class=\"n\">lChaine<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">String<\/span><span class=\"o\">(<\/span><span class=\"n\">lChaineBytes<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"n\">lChaine<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"n\">lReader<\/span><span class=\"o\">.<\/span><span class=\"na\">close<\/span><span class=\"o\">();<\/span>\r\n            <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"n\">IOException<\/span> <span class=\"n\">lException<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en lecture.\"<\/span><span class=\"o\">);<\/span>\r\n            <span class=\"o\">}<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en lecture.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"o\">}<\/span>\r\n\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">new<\/span> <span class=\"n\">Programme<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Pour l&rsquo;exemple plus complexe de la section pr\u00e9c\u00e9dente (celui avec le protocole permettant de stocker plus qu&rsquo;une seule cha\u00eene), voici l&rsquo;exemple permettant d&rsquo;obtenir la liste de cha\u00eene:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.FileInputStream<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.IOException<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.InputStream<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.nio.ByteBuffer<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.ArrayList<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.List<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"kd\">private<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">afficherChaines<\/span><span class=\"o\">(<\/span><span class=\"n\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">String<\/span><span class=\"o\">&gt;<\/span> <span class=\"n\">aListe<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Les cha\u00eenes:\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"k\">for<\/span> <span class=\"o\">(<\/span><span class=\"n\">String<\/span> <span class=\"n\">lChaine<\/span> <span class=\"o\">:<\/span> <span class=\"n\">aListe<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"    \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lChaine<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"nf\">Programme<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lFichier<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"o\">(<\/span><span class=\"s\">\"test.bin\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"kt\">byte<\/span><span class=\"o\">[]<\/span> <span class=\"n\">lIntBytes<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"kt\">byte<\/span><span class=\"o\">[<\/span><span class=\"mi\">4<\/span><span class=\"o\">];<\/span>\r\n        <span class=\"kt\">int<\/span> <span class=\"n\">lTailleChaine<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"n\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">String<\/span><span class=\"o\">&gt;<\/span> <span class=\"n\">lListeChaines<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">ArrayList<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">String<\/span><span class=\"o\">&gt;();<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">.<\/span><span class=\"na\">canRead<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">InputStream<\/span> <span class=\"n\">lReader<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">FileInputStream<\/span><span class=\"o\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"k\">while<\/span> <span class=\"o\">(<\/span><span class=\"n\">lReader<\/span><span class=\"o\">.<\/span><span class=\"na\">available<\/span><span class=\"o\">()<\/span> <span class=\"o\">&gt;<\/span> <span class=\"mi\">3<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                    <span class=\"n\">lReader<\/span><span class=\"o\">.<\/span><span class=\"na\">read<\/span><span class=\"o\">(<\/span><span class=\"n\">lIntBytes<\/span><span class=\"o\">);<\/span>\r\n                    <span class=\"n\">lTailleChaine<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ByteBuffer<\/span><span class=\"o\">.<\/span><span class=\"na\">wrap<\/span><span class=\"o\">(<\/span><span class=\"n\">lIntBytes<\/span><span class=\"o\">).<\/span><span class=\"na\">getInt<\/span><span class=\"o\">();<\/span>\r\n                    <span class=\"kt\">byte<\/span><span class=\"o\">[]<\/span> <span class=\"n\">lChaineBytes<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"kt\">byte<\/span><span class=\"o\">[<\/span><span class=\"n\">lTailleChaine<\/span><span class=\"o\">];<\/span>\r\n                    <span class=\"n\">lReader<\/span><span class=\"o\">.<\/span><span class=\"na\">read<\/span><span class=\"o\">(<\/span><span class=\"n\">lChaineBytes<\/span><span class=\"o\">);<\/span>\r\n                    <span class=\"n\">lListeChaines<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"k\">new<\/span> <span class=\"n\">String<\/span><span class=\"o\">(<\/span><span class=\"n\">lChaineBytes<\/span><span class=\"o\">));<\/span>\r\n                <span class=\"o\">}<\/span>\r\n                <span class=\"n\">afficherChaines<\/span><span class=\"o\">(<\/span><span class=\"n\">lListeChaines<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"n\">lReader<\/span><span class=\"o\">.<\/span><span class=\"na\">close<\/span><span class=\"o\">();<\/span>\r\n            <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"n\">IOException<\/span> <span class=\"n\">lException<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en lecture.\"<\/span><span class=\"o\">);<\/span>\r\n            <span class=\"o\">}<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en lecture.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"o\">}<\/span>\r\n\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">new<\/span> <span class=\"n\">Programme<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<h5>La classe <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/nio\/channels\/FileChannel.html\" target=\"_blank\" rel=\"noopener\"><strong>FileChannel<\/strong><\/a><\/h5>\n<p>Il est possible de g\u00e9rer la position de lecture des objets \u00ab\u00a0FileInputStream\u00a0\u00bb et \u00ab\u00a0FileOutputStream\u00a0\u00bb en utilisant leur m\u00e9thode <strong>getChannel()<\/strong>. Cette m\u00e9thode retourne un objet de type <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/nio\/channels\/FileChannel.html\" target=\"_blank\" rel=\"noopener\"><strong>FileChannel<\/strong> qui poss\u00e8de plusieurs m\u00e9thodes utiles dans le contr\u00f4le de la position de lecture et d&rsquo;\u00e9criture.<\/a><\/p>\n<p>Voici les m\u00e9thodes les plus pertinentes du <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/nio\/channels\/FileChannel.html\" target=\"_blank\" rel=\"noopener\"><strong>FileChannel<\/strong><\/a>:<\/p>\n<ul>\n<li>position(): Retourne la position de lecture ou d&rsquo;\u00e9criture en cours dans le fichier;<\/li>\n<li>position(int nouvellePosition): Change la position de lecture ou d&rsquo;\u00e9criture dans le fichier \u00e0 \u00ab\u00a0nouvellePosition\u00a0\u00bb;<\/li>\n<li>size(): Retourne la taille du fichier.<\/li>\n<\/ul>\n<p>Voici un exemple utilisant la position de lecture dans un fichier et la taille du fichier:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.io.File<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.FileInputStream<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.io.IOException<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.nio.channels.FileChannel<\/span><span class=\"o\">;<\/span>\r\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.Scanner<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span> <span class=\"o\">{<\/span>\r\n\r\n    <span class=\"kd\">private<\/span> <span class=\"kt\">int<\/span> <span class=\"nf\">lireOctet<\/span><span class=\"o\">(<\/span><span class=\"n\">FileInputStream<\/span> <span class=\"n\">aReader<\/span><span class=\"o\">,<\/span> <span class=\"kt\">int<\/span> <span class=\"n\">aPosition<\/span><span class=\"o\">)<\/span>\r\n            <span class=\"kd\">throws<\/span> <span class=\"n\">PositionInvalideException<\/span><span class=\"o\">,<\/span> <span class=\"n\">IOException<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">FileChannel<\/span> <span class=\"n\">lChannel<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aReader<\/span><span class=\"o\">.<\/span><span class=\"na\">getChannel<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"kt\">int<\/span> <span class=\"n\">lResultat<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"kt\">byte<\/span><span class=\"o\">[]<\/span> <span class=\"n\">lIntBytes<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"kt\">byte<\/span><span class=\"o\">[<\/span><span class=\"mi\">4<\/span><span class=\"o\">];<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">aPosition<\/span> <span class=\"o\">&gt;=<\/span> <span class=\"mi\">0<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"n\">aPosition<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">lChannel<\/span><span class=\"o\">.<\/span><span class=\"na\">size<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">lChannel<\/span><span class=\"o\">.<\/span><span class=\"na\">position<\/span><span class=\"o\">(<\/span><span class=\"n\">aPosition<\/span><span class=\"o\">);<\/span>\r\n            <span class=\"n\">lResultat<\/span> <span class=\"o\">=<\/span> <span class=\"n\">aReader<\/span><span class=\"o\">.<\/span><span class=\"na\">read<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"n\">PositionInvalideException<\/span><span class=\"o\">(<\/span><span class=\"s\">\"La position \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">aPosition<\/span> <span class=\"o\">+<\/span>\r\n                    <span class=\"s\">\" n'est pas valide.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n        <span class=\"k\">return<\/span> <span class=\"n\">lResultat<\/span><span class=\"o\">;<\/span>\r\n    <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"nf\">Programme<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">File<\/span> <span class=\"n\">lFichier<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">File<\/span><span class=\"o\">(<\/span><span class=\"s\">\"test.bin\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">Scanner<\/span> <span class=\"n\">lScanner<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Scanner<\/span><span class=\"o\">(<\/span><span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">in<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">String<\/span> <span class=\"n\">lLigne<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"kt\">int<\/span> <span class=\"n\">lPosition<\/span><span class=\"o\">,<\/span> <span class=\"n\">lResultat<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">.<\/span><span class=\"na\">canRead<\/span><span class=\"o\">())<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">FileInputStream<\/span> <span class=\"n\">lReader<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">FileInputStream<\/span><span class=\"o\">(<\/span><span class=\"n\">lFichier<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">print<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Entrez l'octet que vous voulez lire: \"<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"n\">lLigne<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lScanner<\/span><span class=\"o\">.<\/span><span class=\"na\">nextLine<\/span><span class=\"o\">();<\/span>\r\n                <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\r\n                    <span class=\"n\">lPosition<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Integer<\/span><span class=\"o\">.<\/span><span class=\"na\">parseInt<\/span><span class=\"o\">(<\/span><span class=\"n\">lLigne<\/span><span class=\"o\">);<\/span>\r\n                    <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\r\n                        <span class=\"n\">lResultat<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lireOctet<\/span><span class=\"o\">(<\/span><span class=\"n\">lReader<\/span><span class=\"o\">,<\/span> <span class=\"n\">lPosition<\/span><span class=\"o\">);<\/span>\r\n                        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"L'octet \u00e0 la position \"<\/span> <span class=\"o\">+<\/span>\r\n                                <span class=\"n\">lPosition<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\" est \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lResultat<\/span><span class=\"o\">);<\/span>\r\n                    <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"n\">PositionInvalideException<\/span> <span class=\"n\">laException<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"n\">laException<\/span><span class=\"o\">.<\/span><span class=\"na\">getMessage<\/span><span class=\"o\">());<\/span>\r\n                    <span class=\"o\">}<\/span>\r\n                <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"n\">NumberFormatException<\/span> <span class=\"n\">laException<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                    <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"La valeur \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lLigne<\/span> <span class=\"o\">+<\/span>\r\n                            <span class=\"s\">\" n'est pas un entier valide.\"<\/span><span class=\"o\">);<\/span>\r\n                <span class=\"o\">}<\/span>\r\n                <span class=\"n\">lReader<\/span><span class=\"o\">.<\/span><span class=\"na\">close<\/span><span class=\"o\">();<\/span>\r\n            <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"n\">IOException<\/span> <span class=\"n\">laException<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n                <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en lecture.\"<\/span><span class=\"o\">);<\/span>\r\n            <span class=\"o\">}<\/span>\r\n        <span class=\"o\">}<\/span> <span class=\"k\">else<\/span> <span class=\"o\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Ne peut pas ouvrir le fichier en lecture.\"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"o\">}<\/span>\r\n\r\n    <span class=\"o\">}<\/span>\r\n\r\n\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">aArguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"k\">new<\/span> <span class=\"n\">Programme<\/span><span class=\"o\">();<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Pour information, l&rsquo;exception \u00ab\u00a0PositionInvalideException\u00a0\u00bb est une exception de base impl\u00e9ment\u00e9e comme ceci:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">PositionInvalideException<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">Exception<\/span> <span class=\"o\">{<\/span>\r\n\t\r\n    <span class=\"kd\">public<\/span> <span class=\"nf\">PositionInvalideException<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span> <span class=\"n\">aMessage<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"kd\">super<\/span><span class=\"o\">(<\/span><span class=\"n\">aMessage<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p><a href=\"https:\/\/www.louismarchand.me\/index.php\/programmation-orientee-objet-1\/\">Retour<\/a><\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p>Auteur: Louis Marchand<br \/>\n<a href=\"https:\/\/creativecommons.org\/licenses\/by\/4.0\/deed.fr\" target=\"_blank\" rel=\"license noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/i.creativecommons.org\/l\/by\/4.0\/80x15.png\" alt=\"Creative Commons License\" \/><\/a><br \/>\nSauf pour les sections sp\u00e9cifi\u00e9es autrement, ce travail est sous licence <a href=\"https:\/\/creativecommons.org\/licenses\/by\/4.0\/deed.fr\" target=\"_blank\" rel=\"license noopener noreferrer\">Creative Commons Attribution 4.0 International<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction L&rsquo;utilisation des fichiers en java n\u00e9cessite plusieurs types diff\u00e9rents d&rsquo;objets. Il s&rsquo;agit de m\u00e9canique tr\u00e8s utile afin d&rsquo;incorporer de la persistance de donn\u00e9es dans les programmes, sans avoir besoin de base de donn\u00e9e complexe. La classe \u00ab\u00a0File\u00a0\u00bb Avant de montrer comment lire et \u00e9crire dans les fichiers, il peut \u00eatre int\u00e9ressant de voir comment&hellip; <a class=\"more-link\" href=\"https:\/\/www.louismarchand.me\/index.php\/les-fichiers-en-java\/\">Continue reading <span class=\"screen-reader-text\">Les fichiers en Java<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-619","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/comments?post=619"}],"version-history":[{"count":19,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/619\/revisions"}],"predecessor-version":[{"id":806,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/619\/revisions\/806"}],"wp:attachment":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/media?parent=619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}