Maison  >  Article  >  Java  >  Étude de cas : copie de fichiers

Étude de cas : copie de fichiers

PHPz
PHPzoriginal
2024-07-16 16:27:201042parcourir

Cette section développe un utilitaire utile pour copier des fichiers. Dans cette section, vous apprendrez à écrire un programme permettant aux utilisateurs de copier des fichiers. L'utilisateur doit fournir un fichier source et un fichier cible comme arguments de ligne de commande à l'aide de la commande :

java Copier la cible source

Le programme copie le fichier source dans le fichier cible et affiche le nombre d'octets dans le fichier. Le programme doit alerter l'utilisateur si le fichier source n'existe pas ou si le fichier cible existe déjà. Un exemple d'exécution du programme est présenté dans la figure ci-dessous.

Image description

Pour copier le contenu d'un fichier source vers un fichier cible, il convient d'utiliser un flux d'entrée pour lire les octets du fichier source et un flux de sortie pour envoyer des octets au fichier cible, quel que soit le contenu du fichier. Le fichier source et le fichier cible sont spécifiés à partir de la ligne de commande. Créez un InputFileStream pour le fichier source et un OutputFileStream pour le fichier cible. Utilisez la méthode read() pour lire un octet dans le flux d'entrée, puis utilisez la méthode write(b) pour écrire l'octet dans le flux de sortie. Utilisez BufferedInputStream et BufferedOutputStream pour améliorer les performances. Le code ci-dessous donne la solution au problème.

package demo;
import java.io.*;

public class Copy {
    public static void main(String[] args) throws IOException {
        // Check command-line parameter usage
        if(args.length != 2) {
            System.out.println("Usage: java Copy sourceFile targetfile");
            System.exit(1);
        }

        // Check if source file exists
        File sourceFile = new File(args[0]);
        if(!sourceFile.exists()) {
            System.out.println("Source file " + args[0] + " does not exist");
            System.exit(2);
        }

        // Check if source file exists
        File targetFile = new File(args[1]);
        if(!targetFile.exists()) {
            System.out.println("Target file " + args[1] + " already exist");
            System.exit(3);
        }

        try(
            // Create an input  stream
                BufferedInputStream input = new BufferedInputStream(new FileInputStream(sourceFile));

                // Create an output stream
                BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(targetFile));
            ) {
            // COntinuously read a byte from input and write it to output
            int r, numberOfBytesCopied = 0;
            while((r = input.read()) != -1) {
                output.write((byte)r);
                numberOfBytesCopied++;
            }

            // Display the file size
            System.out.println(numberOfBytesCopied + " bytes copied");
        }
    }
}

Le programme vérifie d'abord si l'utilisateur a transmis les deux arguments requis à partir de la ligne de commande aux lignes 7 à 10.

Le programme utilise la classe File pour vérifier si le fichier source et le fichier cible existent. Si le fichier source n'existe pas (lignes 14 à 17) ou si le fichier cible existe déjà (lignes 20 à 24), le programme se termine.

Un flux d'entrée est créé à l'aide de BufferedInputStream enveloppé sur FileInputStream aux lignes 28, et un flux de sortie est créé à l'aide de BufferedOutputStream enveloppé sur FileOutputStream aux lignes 31.

L'expression ((r = input.read()) != -1) (ligne 35) lit un octet de
input.read(), l'attribue à r et vérifie s'il s'agit de -1. La valeur d'entrée -1 signifie la fin d'un fichier. Le programme lit en continu les octets du flux d'entrée et les envoie au flux de sortie jusqu'à ce que tous les octets aient été lus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn