Programmation informatique - E / S de fichier

Fichiers informatiques

Un fichier informatique est utilisé pour stocker des données au format numérique comme du texte brut, des données d'image ou tout autre contenu. Les fichiers informatiques peuvent être organisés dans différents répertoires. Les fichiers sont utilisés pour conserver les données numériques, tandis que les répertoires sont utilisés pour conserver les fichiers.

Les fichiers informatiques peuvent être considérés comme le pendant numérique des documents papier. Pendant la programmation, vous conservez votre code source dans des fichiers texte avec différentes extensions, par exemple, les fichiers de programmation C se terminent par l'extension.c, Fichiers de programmation Java avec .javaet les fichiers Python avec .py.

Entrée / sortie de fichier

Habituellement, vous créez des fichiers à l'aide d'éditeurs de texte tels que le bloc-notes, MS Word, MS Excel ou MS Powerpoint, etc. Cependant, nous devons souvent créer des fichiers à l'aide de programmes informatiques. Nous pouvons modifier un fichier existant à l'aide d'un programme informatique.

L'entrée de fichier signifie les données qui sont écrites dans un fichier et la sortie de fichier signifie les données qui sont lues à partir d'un fichier. En fait, les termes d'entrée et de sortie sont davantage liés à l'entrée et à la sortie de l'écran. Lorsque nous affichons un résultat à l'écran, il est appelé sortie. De même, si nous fournissons une entrée à notre programme à partir de l'invite de commande, elle est appelée entrée.

Pour l'instant, il suffit de se rappeler que l'écriture dans un fichier est une entrée de fichier et la lecture de quelque chose à partir d'un fichier est une sortie de fichier.

Modes de fonctionnement des fichiers

Avant de commencer à travailler avec un fichier à l'aide d'un programme informatique, nous devons soit créer un nouveau fichier s'il n'existe pas, soit ouvrir un fichier déjà existant. Dans les deux cas, nous pouvons ouvrir un fichier dans les modes suivants -

  • Read-Only Mode- Si vous allez simplement lire un fichier existant et que vous ne souhaitez plus écrire de contenu dans le fichier, vous ouvrirez le fichier en mode lecture seule. Presque tous les langages de programmation fournissent une syntaxe pour ouvrir les fichiers en mode lecture seule.

  • Write-Only Mode- Si vous envisagez d'écrire dans un fichier existant ou dans un fichier nouvellement créé mais que vous ne souhaitez pas lire le contenu écrit de ce fichier, vous ouvrirez le fichier en mode écriture seule. Tous les langages de programmation fournissent une syntaxe pour ouvrir les fichiers en mode écriture seule.

  • Read & Write Mode - Si vous voulez lire et écrire dans le même fichier, vous ouvrirez le fichier en mode lecture et écriture.

  • Append Mode- Lorsque vous ouvrez un fichier pour l'écriture, cela vous permet de commencer à écrire depuis le début du fichier; cependant, il écrasera le contenu existant, le cas échéant. Supposons que nous ne souhaitons pas écraser le contenu existant, puis nous ouvrons le fichier en mode ajout. Le mode Ajouter est en fin de compte un mode d'écriture, qui permet d'ajouter du contenu à la fin du fichier. Presque tous les langages de programmation fournissent une syntaxe pour ouvrir les fichiers en mode ajout.

Dans les sections suivantes, nous apprendrons comment ouvrir un nouveau fichier, comment y écrire et plus tard, comment lire et ajouter plus de contenu dans le même fichier.

Ouverture de fichiers

Vous pouvez utiliser le fopen()fonction pour créer un nouveau fichier ou pour ouvrir un fichier existant. Cet appel initialisera un objet du typeFILE, qui contient toutes les informations nécessaires pour contrôler le flux. Voici le prototype, c'est-à-dire la signature de cet appel de fonction -

FILE *fopen( const char * filename, const char * mode );

Ici, filename est une chaîne littérale, que vous utiliserez pour nommer votre fichier et accéder mode peut avoir l'une des valeurs suivantes -

Sr.Non Mode et description
1

r

Ouvre un fichier texte existant à des fins de lecture.

2

w

Ouvre un fichier texte pour l'écriture. S'il n'existe pas, un nouveau fichier est créé. Ici, votre programme commencera à écrire du contenu depuis le début du fichier.

3

a

Ouvre un fichier texte pour l'écriture en mode ajout. S'il n'existe pas, un nouveau fichier est créé. Ici, votre programme commencera à ajouter du contenu dans le contenu du fichier existant.

4

r+

Ouvre un fichier texte pour lire et écrire les deux.

5

w+

Ouvre un fichier texte pour la lecture et l'écriture. Il tronque d'abord le fichier à une longueur nulle, s'il existe; sinon crée le fichier s'il n'existe pas.

6

a+

Ouvre un fichier texte pour la lecture et l'écriture. Il crée un fichier, s'il n'existe pas. La lecture commencera depuis le début, mais l'écriture ne peut être ajoutée que.

Fermer un fichier

Pour fermer un fichier, utilisez le fclose( )fonction. Le prototype de cette fonction est -

int fclose( FILE *fp );

le fclose( ) la fonction renvoie zéro en cas de succès, ou EOF, caractère spécial, s'il y a une erreur lors de la fermeture du fichier. Cette fonction vide en fait toutes les données encore en attente dans la mémoire tampon du fichier, ferme le fichier et libère toute mémoire utilisée pour le fichier. L'EOF est une constante définie dans le fichier d'en-têtestdio.h.

Il existe diverses fonctions fournies par la bibliothèque standard C pour lire et écrire un fichier caractère par caractère ou sous la forme d'une chaîne de longueur fixe. Voyons quelques-uns d'entre eux dans la section suivante.

Ecrire un fichier

Ci-dessous, la fonction la plus simple pour écrire des caractères individuels dans un flux -

int fputc( int c, FILE *fp );

La fonction fputc() écrit la valeur de caractère de l'argument c dans le flux de sortie référencé par fp. Il renvoie le caractère écrit écrit en cas de succès, sinonEOFs'il y a une erreur. Vous pouvez utiliser les fonctions suivantes pour écrire une chaîne terminée par null dans un flux -

int fputs( const char *s, FILE *fp );

La fonction fputs() écrit la chaîne sdans le fichier référencé par fp. Il renvoie une valeur non négative en cas de succès, sinonEOFest renvoyé en cas d'erreur. Vous pouvez également utiliser la fonctionint fprintf(FILE *fp,const char *format, ...)pour écrire une chaîne dans un fichier. Essayez l'exemple suivant -

#include <stdio.h>

int main() {
   FILE *fp;

   fp = fopen("/tmp/test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}

Lorsque le code ci-dessus est compilé et exécuté, il crée un nouveau fichier test.txt dans /tmprépertoire et écrit deux lignes en utilisant deux fonctions différentes. Lisons ce fichier dans la section suivante.

Lire un fichier

Voici la fonction la plus simple pour lire un fichier texte caractère par caractère -

int fgetc( FILE * fp );

le fgetc() La fonction lit un caractère dans le fichier d'entrée référencé par fp. La valeur de retour est le caractère lu; ou en cas d'erreur, il renvoieEOF. La fonction suivante vous permet de lire une chaîne à partir d'un flux -

char *fgets( char *buf, int n, FILE *fp );

La fonction fgets() lit jusqu'à n - 1 caractères dans le flux d'entrée référencé par fp. Il copie la chaîne de lecture dans le tamponbuf, en ajoutant un null caractère pour terminer la chaîne.

Si cette fonction rencontre un caractère de nouvelle ligne '\ n' ou EOF avant d'avoir lu le nombre maximum de caractères, alors elle ne renvoie que les caractères lus jusqu'à ce point, y compris le caractère de nouvelle ligne. Vous pouvez aussi utiliserint fscanf(FILE *fp, const char *format, ...) pour lire les chaînes d'un fichier, mais il arrête la lecture après avoir rencontré le premier caractère d'espace.

#include <stdio.h>

main() {

   FILE *fp;
   char buff[255];

   fp = fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1 : %s\n", buff );

   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );
   
   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);
}

Lorsque le code ci-dessus est compilé et exécuté, il lit le fichier créé dans la section précédente et produit le résultat suivant -

1 : This
2 : is testing for fprintf...

3 : This is testing for fputs...

Analysons ce qui s'est passé ici. Premièrement lefscanf() méthode lit Thiscar après cela, il a rencontré un espace. Le deuxième appel est pourfgets(), qui lit la ligne restante jusqu'à ce qu'elle rencontre la fin de la ligne. Enfin, le dernier appelfgets() lit complètement la deuxième ligne.

E / S de fichier en Java

Java fournit un ensemble encore plus riche de fonctions pour gérer les E / S de fichiers. Pour plus d'informations sur ce sujet, nous vous suggérons de consulter nos didacticiels Java.

Ici, nous allons voir un programme Java simple, qui est équivalent au programme C expliqué ci-dessus. Ce programme ouvrira un fichier texte, y inscrira quelques lignes de texte et fermera le fichier. Enfin, le même fichier est ouvert puis lu à partir d'un fichier déjà créé. Vous pouvez essayer d'exécuter le programme suivant pour voir la sortie -

import java.io.*;

public class DemoJava {
   public static void main(String []args) throws IOException {
      File file = new File("/tmp/java.txt");
      
      // Create a File
      file.createNewFile();
      
      //  Creates a FileWriter Object using file object
      FileWriter writer = new FileWriter(file); 
      
      // Writes the content to the file
      writer.write("This is testing for Java write...\n");
      writer.write("This is second line...\n");
      
      // Flush the memory and close the file
      writer.flush();
      writer.close();
      
      // Creates a FileReader Object
      FileReader reader = new FileReader(file); 
      char [] a = new char[100];
      
      // Read file content in the array
      reader.read(a);
      System.out.println( a );
      
      // Close the file
      reader.close();
   }
}

Lorsque le programme ci-dessus est exécuté, il produit le résultat suivant -

This is testing for Java write...
This is second line...

E / S de fichier en Python

Le programme suivant montre la même fonctionnalité pour ouvrir un nouveau fichier, y écrire du contenu et enfin lire le même fichier -

# Create a new file
fo = open("/tmp/python.txt", "w")

# Writes the content to the file
fo.write( "This is testing for Python write...\n");
fo.write( "This is second line...\n");

# Close the file
fo.close()

# Open existing file
fo = open("/tmp/python.txt", "r")

# Read file content in a variable
str = fo.read(100);
print str

# Close opened file
fo.close()

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -

This is testing for Python write...
This is second line...