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