Ferramentas de Site


dev_geral:java:tutorial:102_copy

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);
    }
}

Navegação

dev_geral/java/tutorial/102_copy.txt · Última modificação em: 2021/12/12 00:30 (edição externa)