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();
}
}