17. Les fichiers

En Java, on peut facilement accéder à des fichiers à partir d'une application. On ne peut pas le faire à partir d'une applet pour des questions de sécurité. On remarquera également qu'à tout accès au système de fichiers, il peut se produire une exception java.io.IOException.

L'exemple ci-dessous montre comment obtenir des informations sur un fichier. Notons qu'il n'existe pas de classe spéciale pour traiter des répertoires, ceux-ci sont considérés comme des fichiers.

Informations sur un fichier

import java.io.*;

class fileInfo {
    public static void main (String args[]) throws java.io.IOException {
        System.out.println("Entrez le repertoire ou se trouve le fichier : ");
        char ch;

        // directory
        StringBuffer dirBuf = new StringBuffer();
        while ((ch = (char)System.in.read()) != '\n')
            dirBuf.append(ch);
        File dir = new File(dirBuf.toString());

        // file
        System.out.println("Entrez le nom du fichier : ");
        StringBuffer fileBuf = new StringBuffer();
        while ((ch = (char)System.in.read()) != '\n')
            fileBuf.append(ch);
        File fil = new File(dir,fileBuf.toString());
        if (fil.exists()) {
            System.out.println("Fichier trouve");
            System.out.println("Nom de fichier : "+fil.getName());
            System.out.println("Chemin du fichier : "+fil.getPath());
            System.out.println("Chemin absolu : "+fil.getAbsolutePath());
            System.out.println("Droit de lecture : "+fil.canRead());
            System.out.println("Droit d'ecriture : "+fil.canWrite());
            System.out.println("\nContenu du repertoire :");
            String listing[] = dir.list();
            for (int i = 0;i < listing.length;i++)
                System.out.println(listing[i]);
        } else {
            System.out.println("Fichier absent");
        }
    }
}

La lecture et l'écriture se fait en utilisant les différentes classes de traitement des flux (streams). L'exemple ci-dessous copie un fichier source dans un fichier destination, après avoir effectué un certain nombre de tests pour vérifier que l'opération de copie est possible. Les classes utilisées sont FileInputStream et FileOutputStream du paquetage java.io. Ces deux classes étendent java.io.InputStream.

Copieur de fichiers

import java.io.*;

class fileCopy {
    public static void main (String args[]) throws java.io.IOException {
        char ch;

    // repertoire source
        
        System.out.println("repertoire source : ");
        StringBuffer dirBuf = new StringBuffer();
        while ((ch = (char)System.in.read()) != '\n')
            dirBuf.append(ch);
        File srcDir = new File(dirBuf.toString());

        if (!srcDir.exists()) {
            System.out.println("repertoire absent");
            System.exit(1);
        } else if (!srcDir.canRead()) {
            System.out.println("repertoire illisible");
            System.exit(1);
        }

    // fichier source
        
        System.out.println("fichier source : ");
        StringBuffer fileBuf = new StringBuffer();
        while ((ch = (char)System.in.read()) != '\n')
            fileBuf.append(ch);
        File srcFile = new File(srcDir,fileBuf.toString());

        if (!srcFile.exists()) {
            System.out.println("fichier absent");
            System.exit(1);
        } else if (!srcFile.canRead()) {
            System.out.println("fichier illisible");
            System.exit(1);
        }

    // repertoire destination

        System.out.println("repertoire destination : ");
        dirBuf = new StringBuffer();
        while ((ch = (char)System.in.read()) != '\n')
            dirBuf.append(ch);
        File dstDir = new File(dirBuf.toString());

        if (!dstDir.exists()) {
            System.out.println("repertoire absent");
            System.exit(1);
        } else if (!dstDir.canWrite()) {
            System.out.println("repertoire protege en ecriture");
            System.exit(1);
        }

    // fichier destination

        System.out.println("fichier destination : ");
        fileBuf = new StringBuffer();
        while ((ch = (char)System.in.read()) != '\n')
            fileBuf.append(ch);
        File dstFile = new File(dstDir,fileBuf.toString());

        if (dstFile.exists()) {
            System.out.println("fichier existant");
            System.exit(1);
        }
        
    // copie du fichier
    
        FileInputStream inStream = new FileInputStream(srcFile);
        FileOutputStream outStream = new FileOutputStream(dstFile);

        // tant que ce n'est pas la fin du fichier
        while (inStream.available() > 0)
            outStream.write(inStream.read());

        // fermeture des fichiers
        inStream.close();
        outStream.close();
    }
}

Index général - Index concepts - Règles BNF
© 1996, DIP Genève, Alexandre Maret & Jacques Guyot
page générée Fri Jun 21 15:41:36 MET DST 1996