Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/12/2008, 13:13
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 17 años
Puntos: 260
Sonrisa Respuesta: Cambiar formato

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/ ).