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