Autor
|
Tema: Modificar fichero en java (Leído 3,153 veces)
|
ryhuso
Desconectado
Mensajes: 25
|
Hola mi problema es que necesito modificar un fichero en java pero no se como hacerlo busque por la web y no encontre ejemplos claros. lo que tengo que hacer es que en un fichero que tengo creado de una agenda modificarle el numero de telefono. public void altaFactura(Abonado nueva) { try { File f = new File("facturas_telf.dat"); FileWriter fw; BufferedWriter bw; if (f.exists()) { fw = new FileWriter(f, true); bw = new BufferedWriter(fw); bw.newLine(); bw.write(nueva.numeroAbonado + "%" + nueva.nombre + "%" + nueva.factura); } else { fw = new FileWriter(f); bw = new BufferedWriter(fw); bw.write(nueva.numeroAbonado + "%" + nueva.nombre + "%" + nueva.factura); } bw.close(); fw.close(); } catch (Exception e) { System.out.println(e); } } lo que quiero es buscar un numero de telefono numeroAbonado en este caso y cambiar el numero o nombre .... modificarlo .
|
|
« Última modificación: 17 Abril 2020, 14:32 pm por ryhuso »
|
En línea
|
|
|
|
rub'n
Desconectado
Mensajes: 1.217
(e -> λ("live now")); tatuar -> λ("α");
|
Hola mi problema es que necesito modificar un fichero en java pero no se como hacerlo busque por la web y no encontre ejemplos claros.
lo que tengo que hacer es que en un fichero que tengo creado de una agenda modificarle el numero de telefono.
Bueno, y como hiciste el fichero? muestra a ver que tal. parte del código, y se mas descriptivo.
Usa GeSHi si vas a copiar código java.
|
|
|
En línea
|
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
|
|
|
@XSStringManolo
Hacker/Programador
Colaborador
Desconectado
Mensajes: 2.399
Turn off the red ligth
|
Hay muchas formas distinas de hacer lo mismo, según el tipo de archivo, tamaño, permisos, frecuencia de escritura... Por la info que das... Supongo que quieres hacer algo así: String contactos = FileUtils. readFileToString(new File("Contactos.vcf"), "UTF-8"); contactos = contactos.replaceAll("671718181", "653717272"); File contactosM = new File("ContactosModificados.vcf"); FileUtils.writeStringToFile(contactosM, contactos, "UTF-8");
|
|
|
En línea
|
Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖
|
|
|
ryhuso
Desconectado
Mensajes: 25
|
Bueno, y como hiciste el fichero? muestra a ver que tal. parte del código, y se mas descriptivo.
Usa GeSHi si vas a copiar código java. [ public void altaFactura(Abonado nueva) { try { File f = new File("facturas_telf.dat"); FileWriter fw; BufferedWriter bw; if (f.exists()) { fw = new FileWriter(f, true); bw = new BufferedWriter(fw); bw.newLine(); bw.write(nueva.numeroAbonado + "%" + nueva.nombre + "%" + nueva.factura); } else { fw = new FileWriter(f); bw = new BufferedWriter(fw); bw.write(nueva.numeroAbonado + "%" + nueva.nombre + "%" + nueva.factura); } bw.close(); fw.close(); } catch (Exception e) { System.out.println(e); } } ]
|
|
|
En línea
|
|
|
|
rub'n
Desconectado
Mensajes: 1.217
(e -> λ("live now")); tatuar -> λ("α");
|
bien como es el Objeto Abonado ?
También se podría escribir en forma de objeto Serializado.
|
|
« Última modificación: 17 Abril 2020, 15:27 pm por rub'n »
|
En línea
|
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
|
|
|
ryhuso
Desconectado
Mensajes: 25
|
el objeto abonado son 3 cadenas telefono nombre factura
|
|
|
En línea
|
|
|
|
rub'n
Desconectado
Mensajes: 1.217
(e -> λ("live now")); tatuar -> λ("α");
|
el objeto abonado son 3 cadenas telefono nombre factura
- Para no hardcodear la ruta mejor busca el fichero con un JFileChooser
- Para reemplazar invoca a reemplazarNumero(), con dos parámetros String viejo y el String nuevo
Si quieres pruebalo.Ejemplo bean Abonado/** * @implSpec NO-THREAD-SAFE */ public class Abonado { return nombre; } public void setNombre (String nombre ) { this.nombre = nombre; } return telefono; } public void setTelefono (String telefono ) { this.telefono = telefono; } return factura; } public void setFactura (String factura ) { this.factura = factura; } @Override return "Abonado{" + "nombre='" + nombre + '\'' + ", telefono='" + telefono + '\'' + ", factura='" + factura + '\'' + '}'; } }
import javax.swing.*; import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.util.stream.Collectors; /** * */ public class FacturasTelf { private Path rutaFichero; public FacturasTelf() { final Abonado abonado = new Abonado(); abonado.setNombre("gas"); abonado.setFactura("lus DeboSiempre"); abonado.setTelefono("3999 999 050"); //Buscar Fichero no hardcoded if(buscarFichero()) { //Escritura normal objeto //this.altaFactura(abonado); //Invocar para reemplazar viejo numero telefonico Basico //Puedes invocarlo por medio de un listerner this.reemplazarNumero("3999 111 222" , "3999 111 111"); } } public boolean buscarFichero() { jFileChooser.setDialogTitle("Abrir Fichero"); final int opc = jFileChooser.showOpenDialog(null); boolean value = false; rutaFichero = jFileChooser.getSelectedFile().toPath(); } else { JOptionPane. showMessageDialog(null, "Fichero sin seleccionar"); } return value; } /** * * @param nueva */ public void altaFactura(Abonado nueva) { if (rutaFichero.toFile().exists()) { //Para reemplazar numero bw.newLine(); bw.write(nueva.getTelefono() + "%" + nueva.getNombre() + "%" + nueva.getFactura()); } else { //No ejecuta, new File() lo crea por defecto //fw = new FileWriter(f); //bw = new BufferedWriter(fw); bw.write(nueva.getTelefono() + "%" + nueva.getNombre() + "%" + nueva.getFactura()); } } } /** * Metodo usado para reemplazar el viejo numero * * @param viejo * @param numeroReemplazar */ public void reemplazarNumero (final String viejo, final String numeroReemplazar ) { final StringBuilder sb = new StringBuilder(); sb.append( reader .lines() . collect(Collectors. joining( System. lineSeparator() ))); nuevaData = sb.toString().replaceAll(viejo, numeroReemplazar ); //mejor un logger e.printStackTrace(); } /** * Nuevamente escribimos el fichero */ writer.write(nuevaData); writer. write(System. lineSeparator()); //separador del sistema JOptionPane. showMessageDialog(null, "Reemplazo listo"); //mejor un logger e.printStackTrace(); } } public static void main (String ... blablla) { new FacturasTelf(); } }
Aunque prefiero los DSL por ejemplo algo simple final Abonado abonado = new Abonado(); abonado.setNombre("Factura Telefono N#2144141"); abonado.setFactura("lus DeboSiempre"); abonado.setTelefono("3999 999 050"); /** * Para escribir en un fichero ejemplo */ new IFacturar.FacturaImpl() .buscarFichero() .escribirFichero(abonado) //toString() .make(); /** * Para reemplazar String en un fichero, no tan eficiente, mejor RandomAccessFile */ new IFacturar.FacturaImpl() .guardarFichero() .reemplazar(e -> e.replaceAll("3999 999 050", "3999 000 000"))//con expresión lambda de una vez. .make();
package foro; import javax.swing.*; import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; import java.util.Objects; import java.util.function.UnaryOperator; import java.util.logging.Logger; /** * DSL simple. */ public interface IFacturar { /** * @param <T> */ interface Builder<T> { default Builder<T> buscarFichero() { return this; } default Builder<T> guardarFichero() { return this; } Builder<T> altaFactura(Abonado nueva); Builder<T> reemplazar(final UnaryOperator<String> unaryOperator); <T> Builder<T> escribirFichero(final T t); T make(); } @SuppressWarnings("unchecked") abstract class AbstractBaseClassFactura<S> implements Builder<S> { private Path rutaFichero; private String nuevaData = ""; private static final Logger LOG = Logger.getLogger(AbstractBaseClassFactura.class.getSimpleName()); public AbstractBaseClassFactura() { } @Override public Builder<S> buscarFichero() { jFileChooserBuscar(); return this; } private void jFileChooserBuscar() { jFileChooser.setDialogTitle("Abrir Fichero"); final int opc = jFileChooser.showOpenDialog(null); this.rutaFichero = jFileChooser.getSelectedFile().toPath(); } } @Override public Builder<S> guardarFichero() { jFileChooserGuardar(); return this; } private void jFileChooserGuardar() { jFileChooser.setDialogTitle("Guardar Fichero"); final int opc = jFileChooser.showSaveDialog(null); this.rutaFichero = jFileChooser.getSelectedFile().toPath(); } } /** * @param nueva */ public Builder<S> altaFactura(Abonado nueva) { if (rutaFichero.toFile().exists()) { bw.newLine(); bw.write(nueva.getTelefono() + "%" + nueva.getNombre() + "%" + nueva.getFactura()); JOptionPane. showMessageDialog(null, "Fichero escrito correctamente!"); } LOG.warning(e.getMessage()); } return this; } /** * Con UnaryOperator para reemplazar el numero por medio de expresion lambda * * @param unaryOperator * @return Builder<S> */ public Builder<S> reemplazar(final UnaryOperator<String> unaryOperator) { Objects.requireNonNull(rutaFichero, () -> "ruta destino es nula"); Path destino = rutaFichero; final long id = System. currentTimeMillis(); //tomar extension final String ext = destino. getFileName(). toString(). substring(destino. getFileName(). toString(). lastIndexOf(".")); final String fileName = destino. getFileName(). toString(). replace(ext, id +"reemplazado"+ ext ); destino = destino.resolveSibling(fileName); reader.lines() .map(unaryOperator) .forEach(e -> { try { wr.write(e); wr. write(System. lineSeparator()); ex.printStackTrace(); } }); JOptionPane. showMessageDialog(null, "Reemplazo listo!"); LOG.warning(e.getMessage()); } return this; } /** * Escritura de fichero */ @SuppressWarnings("unchecked") public <O> Builder<O> escribirFichero(O abonado) { Objects.requireNonNull(rutaFichero,"ruta de fichero es nula"); writer.write(abonado.toString()); writer. write(System. lineSeparator()); //separador del sistema JOptionPane. showMessageDialog(null, "Escritura Lista!"); LOG.warning(e.getMessage()); } return (Builder<O>) this; } } /** * */ class FacturaImpl extends AbstractBaseClassFactura<FacturaImpl> { @Override public FacturaImpl make() { return new FacturaImpl(); } } public static void main (String... blablla) { final Abonado abonado = new Abonado(); abonado.setNombre("Factura Telefono N#2144141"); abonado.setFactura("lus DeboSiempre"); abonado.setTelefono("3999 999 050"); /** * Para escribir en un fichero ejemplo */ /*new IFacturar.FacturaImpl() .buscarFichero() .escribirFichero(abonado) //toString() .make();*/ /** * Para reemplazar String en un fichero, no tan eficiente, mejor RandomAccessFile */ new IFacturar.FacturaImpl() .guardarFichero() .reemplazar(e -> e.replaceAll("3999 999 050", "3999 000 000"))//con expresión lambda de una vez. .make(); } }
|
|
« Última modificación: 21 Abril 2020, 21:39 pm por rub'n »
|
En línea
|
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen king
|
|
|
ryhuso
Desconectado
Mensajes: 25
|
Gracias por la ayuda..
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Modificar fichero con Perl o Script
Scripting
|
AntoñitoOlmos
|
2
|
2,927
|
7 Noviembre 2007, 09:13 am
por AntoñitoOlmos
|
|
|
[BATCH] Modificar Registros Fichero por script
Scripting
|
xavima
|
5
|
6,695
|
7 Mayo 2013, 09:38 am
por xavima
|
|
|
Modificar datos en fichero // Algo esta fallando.
Programación C/C++
|
gastongaston
|
3
|
1,923
|
4 Octubre 2018, 16:29 pm
por gastongaston
|
|
|
Buscar y modificar lineas de un fichero
Programación C/C++
|
lordluisiv
|
0
|
1,889
|
17 Abril 2019, 22:11 pm
por lordluisiv
|
|
|
[java] Método modificar sobre datos en un fichero
Java
|
silk_25
|
2
|
3,862
|
13 Febrero 2023, 21:28 pm
por rub'n
|
|