Hola.
Puedo proponer una solución hecha en Java que es con el lenguaje que me apaño un poco bien. Adjunto código y un archivo .jar ejecutable
Puesto que dices que es para un PC con Windows XP, un SO ya descontinuado y sin soporte por parte de Java, el jar lo he compilado para una versión Java de las antiguas.
No se si te funcionará la verdad, no tengo un Windows XP para testearlo.
El programa que he hecho tiene una interfaz muy sencilla. Cuando se ejecute aparece una pequeña ventanita con dos botones: Iniciar y Terminar
Y también con una barra de menú llamada Fichero.
Esta barra de menú es para escoger/crear el fichero txt que quieres modificar. Al clickarle aparece el típico explorador para escoger el archivo o bien crearlo nuevo.
Al crearlo no es necesario que le pongas el texto "aeioubcd". El programa, al iniciar el proceso, siempre empezará escribiendo esa linea e irá pasando por otras.
A no ser que necesites que aunque no se ejecute el programa, ese archivo siempre tenga esa línea. Entonces convendría modificar el programa si es el caso.
Una vez elegido/creado el archivo txt que se va a alterar, la ruta queda guardad en un archivo .cfg para no tener que volver a seleccionarlo cada vez que inicies el programa.
Pero siempre podrás volver a cambiar la ruta si necesitases mover el archivo txt a otra carpeta.
Seleccionado el archivo, ahora se puede pulsar el botón Iniciar y se comenzará a sobrescribir el archivo cada 3 segundos con las líneas que indicaste.
Con el botón Terminar se finaliza el proceso. Y eso es todo.
Adjunto un zip con el código en dos archivos Java y el JAR ejecutable.
Para quien quiera que le explique un poco lo que hecho, pues he creado dos clases.
Una clase JFrame donde se crea el marco, botones y las acciones de estos.
La otra clase es la que se encarga de modificar el fichero de texto e implementa la interfaz Runnable. Esto es interesante porque así puedo crear un hilo de ejecución separado del programa principal que se dedique a eso, a modificar el archivo.
Tiene un array de String con las líneas que tiene que ir escribiendo. Cada tres segundos modifica el archivo con una nueva línea.
Este proceso hago que se repita con un bucle while cuya condición es un boolean al que mediante el botón Terminar, le doy valor false para poner fin al proceso.
Esta clase es así de sencilla:
public class Cambiador implements Runnable{
private File fichero;
private String[] lineas;
private boolean ejecutar;
private int linea;
public Cambiador(File f) {
fichero = f;
lineas = new String[]{
"aeioubcd",
"11223344",
"abcdefgh",
"aabbccdd",
"eeffgghh",
"iijjkkll",
"mmnnoopp",
"qqrrsstt",
"eeeerree"
};
ejecutar = true;
linea = 0;
}
public void setEjecutar(boolean eleccion) {
ejecutar = eleccion;
}
@Override
public void run() {
try {
while (ejecutar) {
BufferedWriter bw = new BufferedWriter(new FileWriter(fichero, false));
if (linea == lineas.length)
linea = 0;
bw.write(lineas[linea]);
linea++;
bw.close();
Thread.sleep(3000);
}
} catch (IOException e) {
mensaje("Error accediendo al archivo TXT","Cambiador");
} catch (InterruptedException e) {
mensaje("Error de ejecución de hilo","Cambiador");
}
}
private void mensaje(String texto, String titulo) {
JOptionPane.showMessageDialog(null, texto, titulo, JOptionPane.WARNING_MESSAGE);
}
}
La otra clase tiene más código porque modela más cosas, pero en realidad tampoco es compleja.
public class CambiaTXT extends JFrame{
private File ficheroTXT;
private JMenu fichero;
private JButton botonIniciar;
private JButton botonTerminar;
private Cambiador cambiador;
public CambiaTXT() {
//Barra de Menu
JMenuBar barra = new JMenuBar();
fichero = new JMenu("Fichero");
JMenuItem setFichero = new JMenuItem("Ruta de Fichero");
setFichero.addActionListener(new AccionEstablecerRuta());
fichero.add(setFichero);
barra.add(fichero);
setJMenuBar(barra);
//Panel y componentes
ficheroTXT = buscarRutaFichero();
botonIniciar = new JButton("Iniciar");
botonIniciar.addActionListener(new AccionIniciar());
botonTerminar = new JButton("Terminar");
botonTerminar.addActionListener(new AccionTerminar());
botonTerminar.setEnabled(false);
JPanel panel = new JPanel();
panel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15));
panel.setLayout(new FlowLayout(FlowLayout.CENTER, 35, 10));
panel.add(botonIniciar);
panel.add(botonTerminar);
setContentPane(panel);
//Configuracion del marco JFrame
setTitle("Cambiar TXT");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private File buscarRutaFichero() {
File ruta = new File("ruta.cfg");
if (!ruta.exists()) {//No hay ruta guardada
mensaje("No hay ninguna ruta guardada para el archivo TXT.\nUtilice el menú Fichero"
+ " para fijar una ruta.","Abrir ruta guardada");
return null;
}
else {
try {
BufferedReader br = new BufferedReader(new FileReader(ruta));
String linea = br.readLine();
br.close();
return new File(linea);
} catch (FileNotFoundException e) {
mensaje("No se encontro fichero:\n" + ruta.getAbsolutePath(),
"Abrir ruta guardada");
return null;
} catch (IOException e) {
mensaje("Error de acceso a fichero:\n" + ruta.getAbsolutePath(),
"Abrir ruta guardada");
return null;
}
}
}
private class AccionEstablecerRuta implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser jfc = new JFileChooser();
int seleccion = jfc.showDialog(null, "Escoger archivo TXT");
if (seleccion == JFileChooser.APPROVE_OPTION) {
//Establecemos ruta del fichero
ficheroTXT = jfc.getSelectedFile();
//Guardamos ruta para próximas sesiones
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("ruta.cfg", false));
bw.write(ficheroTXT.getAbsolutePath());
bw.close();
} catch (IOException e1) {
mensaje("Error de acceso a ruta.cfg","Guardar ruta de fichero TXT");
}
}
}
}
private class AccionIniciar implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (ficheroTXT == null)
mensaje("No hay ningun archivo txt seleccionado","Iniciar Cambiador");
else {
cambiador = new Cambiador(ficheroTXT);
new Thread(cambiador).start();
botonIniciar.setEnabled(false);
botonTerminar.setEnabled(true);
fichero.setEnabled(false);
}
}
}
private class AccionTerminar implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
cambiador.setEjecutar(false);
botonIniciar.setEnabled(true);
botonTerminar.setEnabled(false);
fichero.setEnabled(true);
}
}
private void mensaje(String texto, String titulo) {
JOptionPane.showMessageDialog(null, texto, titulo, JOptionPane.WARNING_MESSAGE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new CambiaTXT();
}
});
}
}
Espero que sirva. Un saludo.