Ir para o conteúdo

Cópia de Ficheiros: xcopy

Neste exemplo será criada uma pequena aplicação que usa streams para copiar ficheiros e directorias, similar ao comando coy ou xcopy do MS-DOS

package org.pap.wiki;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class XCopy {

    public static void main(String[] args) {
        if (args.length != 2) {
            System.err.println("Sintaxe: XCopy <ficheiro(s) origem> <destino>");
            System.exit(1);
        }

        int index = args[0].indexOf('*');
        XCopy copier = new XCopy();
        String destino = args[1];

        if (index == -1) {
            copier.copyFile(new File(args[0]), destino);
        } else {
            File dir = new File(args[0]).getParentFile();
            if (dir == null) {
                dir = new File(".");
            }
            File[] origens = dir.listFiles(new Filtro(args[0].substring(index + 1)));
            for (int i = 0; i < origens.length; i++) {
                copier.copyFile(origens[i], destino);
            }
        }
    }

    //Método que efectua a cópia
    private void copyFile(File origem, String destino) {
        System.out.print("A copiar " + origem + " -> " + destino);
        FileInputStream finput = null;
        FileOutputStream foutput = null;
        try {
            finput = new FileInputStream(origem);//Stream de origem
            foutput = new FileOutputStream(new File(destino, origem.getName()));//Stream destino
            byte[] buffer = new byte[512];
            int bread;

            bread = finput.read(buffer);
            while (bread > 0) {
                foutput.write(buffer, 0, bread);
                bread = finput.read(buffer);
            }
        } catch (IOException ex) {
            System.out.println("Erro na leitura dos dados.");
            ex.printStackTrace();
        } finally {
            try {
                if (finput != null) {
                    finput.close();
                }
                if (foutput != null) {
                    foutput.close();
                }
            } catch (IOException ignore) {
                //IGNORE
            }
        }
    }
}

Classe que permite filtrar a listagem de ficheiros de uma directoria, implementação simples.

package org.pap.wiki;

import java.io.FilenameFilter;
import java.io.File;

public class Filtro implements FilenameFilter {

    private String extensao;

    public Filtro(String ext) {
        extensao = ext;
    }

    public boolean accept(File dir, String name) {
        return name.endsWith(extensao);
    }
}