Autor Tema: Editar archivo txt automaticamente cada 3 segundos Java Runnable #codigoJava  (Leído 5068 veces)

jogyweb

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Hola, soy nuevo en programación y lo único que vi en el instituto fue programación en basic hace 20 años mas menos.

Necesito crear un pequeño programa que haga lo siguiente.

A partir de un archivo de texto  ( aeiou.txt) con una palabra de 8 caracteres, necesito modificar esa palabra cada 3 segundos, las palabras que van cambiando son 9 y la idea es que se vaya repitiendo.

por ejemplo...

aeiou.txt seria el nombre del archivo

aeioubcd

y este texto sea reemplazado por

11223344
abcdefgh
aabbccdd
eeffgghh
iijjkkll
mmnnoopp
qqrrsstt
eeeerree
aeioubcd

y luego de la última palabra, que todo repita.

Tengo un pc con windows xp y 4 ram. no creo que sea muy pesado el programa.
me imagino que el programa tendria que estar abierto todo el tiempo que se requiera ir cambiando las palabras.

¿Alguien me puede dar una mano con esto? Gracias
« Última modificación: 30 de Octubre 2020, 20:20 por Alex Rodríguez »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Java hilo thread interface Runnable edición periódica automática archivo
« Respuesta #1 en: 15 de Diciembre 2019, 15:25 »
Buenas, no creo que sea muy complicado pero tampoco cosa de hacerse en un minuto. Se podría hacer con diferentes lenguajes, por ejemplo Java, C ó C++.

Si sólo quieres hacer eso posiblemente un pequeño script en C te lo pueda resolver. Y si sólo quieres hacer eso posiblemente no te merezca la pena aprender todo un lenguaje sino más bien pedir que te lo haga alguien. De todas formas por si quieres mirarlo el curso de C está en https://aprenderaprogramar.com/index.php?option=com_content&view=category&id=82&Itemid=210

Salu2
« Última modificación: 30 de Octubre 2020, 20:20 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Editar un archivo txt automaticamente cada 3 segundos
« Respuesta #2 en: 16 de Diciembre 2019, 00:15 »
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:

Código: [Seleccionar]
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.

Código: [Seleccionar]
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.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

jogyweb

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re:Editar un archivo txt automaticamente cada 3 segundos
« Respuesta #3 en: 16 de Diciembre 2019, 07:16 »
Estimado Kabuto, pude probrar el archivo que me envió y es perfecto lo que necesito. Estoy muy agradecido de su ayuda.
Como los nombres que le di son a modo de ejemplo, me gustaria saber si puedo cambiarlos por los 9 nombres que realmente tengo que usar.
Les voy a explicar de que se trata y para qué se usaria lo que solicité.
Trabajo en el área de electrónica y hay un sistema que se llama RDS que es transmitir datos por medio de una emisora de FM, estos datos puede ser el mismo nombre de la canción que se esta emitiendo además de datos propios de la emisora como pueden ser el nombre de la emisora, frecuencia, temperatura ambiental, etc.
La aplicación que utilizo solo me emite el nombre de la canción que transmito más 1 espacio con 8 caracteres donde puedo emitir cualquier palabra a modo de información.
Con esta aplicación tengo la posibilidad de transmitir 9 textos de 8 caracteres como por ejemplo...

Radio
Jogyweb
105.4Mhz
Musica
Continua
24 Hrs
blabla
blabla
:) :) :)

De eso se trataba y les dejo un link de un video donde explico medianamente lo que se trata.

https://www.youtube.com/watch?v=ToFlzDodAXU&t=101s

Muchas gracias y quedo atento a cualquier comentario.

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Editar un archivo txt automaticamente cada 3 segundos
« Respuesta #4 en: 16 de Diciembre 2019, 13:39 »
Hola.

Sí se pueden cambiar esos textos.
Si te es posible usar una interfaz de desarrollo (IDE) como Eclipse o NetBeans, bastaría con crear un proyecto con los dos archivos .java que puse en el zip y modificar el archivo Cambiador.java, en la parte donde se declaran las lineas String que va a contener el array:
Son las líneas marcadas en negrita:

Citar
   public Cambiador(File f) {
      fichero = f;
      lineas = new String[]{
         "aeioubcd",
         "11223344",
         "abcdefgh",
         "aabbccdd",
         "eeffgghh",
         "iijjkkll",
         "mmnnoopp",
         "qqrrsstt",
         "eeeerree"

      };
      ejecutar = true;
      linea = 0;
   }

Una vez cambiado esas líneas por las deseadas, pedimos al IDE que genere un nuevo archivo .jar y ya está.

Puesto que parece no tienes experiencia con programación y desarrollo Java, lo que se me ocurre es que puedo añadir yo una nueva funcionalidad al programa que hice donde mediante un formulario puedas introducir tú los 9 textos.
De hecho es lo mejor, ya que si en el futuro quieres que los textos vayan cambiando, no tiene sentido tener que estar recompilando el programa cada vez.

A ver si hoy encuentro tiempo y miro de como hacerlo. Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

jogyweb

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re:Editar un archivo txt automaticamente cada 3 segundos
« Respuesta #5 en: 16 de Diciembre 2019, 15:23 »
Es correcto, en Java no estoy familiarizado y en realidad casi todo más que en básico el cual dejé de practicar cuando terminó el curso.
sobre la modificación que me menciona, facilita todo para mi.
Quedo atento a sus comentarios. saludos y tengan buen comienzo de semana

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Editar un archivo txt automaticamente cada 3 segundos
« Respuesta #6 en: 16 de Diciembre 2019, 20:51 »
Hola.
A ver si sirve lo que he hecho.
En el menú Fichero he añadido otra opción de configuración. Al clickarle se abre un formulario con 9 campos de texto para indicar las lineas que se quieren ir mostrando en el archivo de texto.
Estos campos están limitados a 8 caracteres ya que mencionaste que ese era un límite impuesto.

Además hay un selector de tiempo, en milisegundos, para escoger el lapso de tiempo que ha de transcurrir entre cambios en el fichero.
Si queremos 3 segundos, pues lo establecemos a 3000.
Si preferimos 2 segundos y medio, pues a 2500.
Etc..

Estos valores de configuración se guardan en un archivo llamado config.cfg. Así que el programa ejecutable JAR ha de ir acompañado siempre de los archivos config.cfg y ruta.cfg

Adjunto nuevo zip con el ejecutable y los archivos .java para quien quiera ver el código. Por prisas y falta de tiempo, el código está sin comentar y no todo lo bien estructurado que debiera. Pero bueno, si alguien tiene preguntas solo tiene que hacerlas.


Espero que te sea útil, muy interesante lo que muestras en tu vídeo Youtube. Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

jogyweb

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re:Editar un archivo txt automaticamente cada 3 segundos
« Respuesta #7 en: 16 de Diciembre 2019, 21:06 »
Estimado Kabuto, he probado el archivo y me aparecen los siguientes mensajes
1.- No hay nunguna ruta guardada para el fichero txt.
utilice el menu fichero para fijar una ruta

luego de aceptar y aparece

2.- Error de acceso a config.cfg

acepto y..

3.- No se encuentra config.cfg

y luego de aceptar, se cierra el mensaje y no aparece el programa, solo los cuadros de diálogo..

Agradezco de igual manera el esfuerzo para crear la aplicación y mejorarla. Es un poco incómodo solo pedir pedir y no poder ayudar en nada,,, jajajaj saludos

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Editar un archivo txt automaticamente cada 3 segundos
« Respuesta #8 en: 16 de Diciembre 2019, 22:04 »
Que raro, a mi me funciona bien.

Parece como si el programa no tuviera permisos de escritura para crear los archivos .cfg.

¿En que directorio/carpeta estás ejecutando el programa? Yo por ejemplo si lo ejecuto desde el mismo escritorio me funciona bien.

También puedes probar a crear tú manualmente los archivos .cfg. En realidad son simples archivos de texto plano.

El archivo config.cfg es un archivo de 10 lineas.
La primera es el tiempo en milisegundos que deseamos.
Las siguientes 9 líneas, son los textos que queremos ir alternando
Citar
3000
Texto1
Texto2
Texto3
Texto4
Texto5
Texto6
Texto7
Texto8
Texto9

Y el archivo ruta.cfg solo contiene una línea, que es la ruta que apunta al archivo txt que queremos modificar.
Por ejemplo:
Citar
C:\Users\orcok\Documents\aeiou.txt

Prueba a crearlos manualmente y que estén junto al archivo .jar ejecutable
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

jogyweb

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re:Editar un archivo txt automaticamente cada 3 segundos
« Respuesta #9 en: 16 de Diciembre 2019, 22:31 »
ahora si funciona todo bien. voy a instalar todo el sistema con transmisor más rds y voy a ver la respuesta en la pantalla del celular donde recibe los datos rds que estoy transmitiendo. saludos

jogyweb

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re:Editar un archivo txt automaticamente cada 3 segundos
« Respuesta #10 en: 20 de Diciembre 2019, 07:22 »
Terminado todo el sistema de RDS gracias a Kabuto que con su ayuda logró dejar por terminado mi proyecto.

Dejo un link para que vean el resultado del proyecto.

https://youtu.be/ZAeLpY0l7B8

Saludos y agradecimientos al foro.

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Editar un archivo txt automaticamente cada 3 segundos
« Respuesta #11 en: 20 de Diciembre 2019, 10:30 »
Me alegra haber colaborado.  :D
Muy interesante lo que has montado.
De programación se algo, pero de electrónica nada de nada.

Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".