Espero que sea de ayuda...
btw... que lea un int a la vez no es problema puesto que de hacer el "buffer" se encarga "Buffered__Stream",
Código:
public static void copyFile(File source) throws Exception {
BufferedInputStream in = new BufferedInputStream(new FileInputStream(source));
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(source.getPath() + ".bak"));
int i;
while ((i = in.read()) != -1) {
out.write(i);
}
out.close();
in.close();
}
Y una aplicación basada en tu código donde hice pruebas...
Código:
package org.ejemplo;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Ejemplo extends Thread {
private boolean running = true;
public Ejemplo() {
}
public void run() {
String strFilter = "b0";
String strFile = "/home/hackmanc/";
while (running) {
nameFilter filter = new nameFilter(strFilter);
findFiles(new File(strFile), filter);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
running = false;
}
}
}
public static void main(String[] args) {
new Ejemplo().start();
}
/**
* Recoge todos los archivos del directorio que cumplan con la condición
* @param file archivo inicial recursivo
* @param filter filtro de nombres de archivo
*/
public static void findFiles(File file, FileFilter filter) {
if (file.isDirectory()) {
for (File f : file.listFiles(filter)) {
findFiles(f, filter);
}
} else {
try {
copyFile(file);
System.out.println("Copiado exitósamente : " + file.getPath());
} catch (Exception e) {
System.out.println("Error en copia : " + file.getPath());
}
}
}
public static void copyFile(File source) throws Exception {
String strNewName = String.format("%1s/MTL%2$s.DAT",
source.getParent(), source.getName().substring(5, 10));
BufferedInputStream in = new BufferedInputStream(new FileInputStream(source));
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(strNewName));
int i;
while ((i = in.read()) != -1) {
out.write(i);
}
out.close();
in.close();
}
private class nameFilter implements FileFilter {
private String mask;
nameFilter(String mask) {
this.mask = mask;
}
public boolean accept(File file) {
return file.getName().startsWith(mask);
}
}
}
Saludos,