Hola,
Posiblemente te sea de ayuda, todavía tienes que revisarlo y adaptarlo exactamente a tus necesidades,
Código:
import java.io.*;
public class Ejemplo extends Thread {
private boolean running = true;
public Ejemplo() {
}
public void run() {
String strFilter = "mask";
String strFile = "c:\\carpeta1";
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()) {
File[] list = file.listFiles(filter);
for (int i = 0; i < list.length; i++) {
findFiles(list[i], filter);
}
} else {
try {
copyFile(file);
// ** comentado ** file.delete();
System.out.println("Copiado exitósamente : " + file.getPath());
} catch (Exception e) {
System.out.println("Error en copia : " + file.getPath());
}
}
}
/**
* Convierte un fichero a XML, CSV, etc...
* @param source fichero origen
* @throws java.lang.Exception si ocurre un error de lectura o escritura
*/
public static void copyFile(File source) throws Exception {
String strNewName = "C:\\salida\\" + source.getName() + ".CSV";
BufferedReader in = new BufferedReader(new FileReader(source));
BufferedWriter out = new BufferedWriter(new FileWriter(strNewName));
String p = System.getProperty("line.separator");
String s = in.readLine();
if (s != null) {
while ((s = in.readLine()) != null) {
out.write(builder(s) + p);
}
}
out.close();
in.close();
}
/**
* Da formato a str
* @param str la cadena a dar formato
* @return la cadena original con un nuevo formato
*/
public static String builder(String str) {
String row = null;
// ** convertir str en otra cosa
row = "<xml>" + str + "</xml>";
return row;
}
private class nameFilter implements FileFilter {
private String mask;
nameFilter(String mask) {
this.mask = mask;
}
public boolean accept(File file) {
if (file.getName().length() > 1) {
return file.getName().startsWith(mask) &&
file.getName().endsWith("txt"));
}
return false;
}
}
}
Es una modificación a una aplicación que filtra el listado de archivos en un directorio (recursivamente) y los convierte en otra cosa, se repite cada 10000 ms. Aunque hace algo parecido a aplicaciones como 'tr', 'sed', 'awk'.
Saludos,
ps:
El post original (
http://www.forosdelweb.com/f45/probl...o-java-561986/ ).