Java - Modificacion de un archivo de texto

 
Vista:
sin imagen de perfil
Val: 98
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Modificacion de un archivo de texto

Publicado por Francisco Emmanuel (60 intervenciones) el 22/03/2019 04:44:54
Hola espero me puedan ayudar lo que pasa es que tengo un archivo de texto (.txt) donde tengo almacenado un lista de productos con su nombre, cantidad de ese producto y precio y ejecuto un programa donde se me despliega un panel con JRadioButton con el nombre del producto y precio y lo que deseo hacer es que cuando el usuario elija algún producto del panel en el archivo de texto me reste la cantidad de ese producto osea uno menos que fue el que el usuario selecciono ademas de que cuando llegue a 0 este producto se borre del archivo de texto espero me puedan ayudar ayudar.

Por favor llevo horas intentándolo y nada me funciona estoy desesperado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Modificacion de un archivo de texto

Publicado por Billy Joel (876 intervenciones) el 22/03/2019 15:20:09
Pues de plano te diría que trabajaras con una base de datos, pero pero pero, si toca trabajar con archivos entonces te recomiendo trabajar Map.

Estructurarías el programa para que cuando inicia lea el archivo y carge los datos en beans (Clases con propiedadees) y éstos sean almacenados un Map para que luego sean accedidos por tu programa.
Crear un método que se encarge de generar el archivo de nuevo cada vez que se interactúa con el Map.

Si pones algo de código estoy seguro que te podré guiar.

Saludos,
;-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 98
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Modificacion de un archivo de texto

Publicado por Emmanuel (60 intervenciones) el 22/03/2019 16:21:26
Pues mira este es el codigo que tengo y la verdad si habia pensado en una base de datos pero mi profe no me lo permitio tiene que ser con archivos txt


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
public class Venta {
 
    ConstructorAlumno al;
    String nl = System.getProperty("line.separator");
    Scanner lector;
    String ruta = "src/ActualizacionInventario/";
    String nombre;
    JRadioButton[] opciones;
    Date date = new Date();
    DateFormat fecha = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
 
    public void run() {
        entrada();
    }
    public void entrada() {
        String nombre = (String) JOptionPane.showInputDialog(null, "Ingrese el nombre del alumno" + nl + "al cuál se le vendera:",
                "ventas", -1, new ImageIcon("src/ActualizacionInventario/venta1.jpg"), null, null);
        al = new LectorDatos().LeerArchivo(nombre);
 
        if (al != null) {
 
            JOptionPane.showMessageDialog(null, "Alumno: " + al.getNombreAlumno() + nl + "Saldo:" + al.getSaldo()
                    + nl + "Alimentos prohibidos: " + al.getAlimentosProhibidos());
            proceso("ProductoPrecio");
 
        } else {
            JOptionPane.showMessageDialog(null, "Ingreso mal el nombre o el alumno no se encuentra registrado", "ERROR :(",
                    JOptionPane.ERROR_MESSAGE);
        }
    }
    public void proceso(String v) {
        try {
            lector = new Scanner(new FileInputStream(ruta + v + ".txt"));
            int index = 0;
            while (lector.hasNext()) {
                lector.nextLine();
                index++;
            }
            opciones = new JRadioButton[index];
            lector = new Scanner(new FileInputStream(ruta + v + ".txt"));
            index = 0;
            while (lector.hasNext()) {
                nombre = lector.nextLine();
                opciones[index] = new JRadioButton(nombre);
                index++;
            }
            JPanel panel = new JPanel();
            panel.setLayout(null);
            UIManager.put("OptionPane.minimumSize", new Dimension(950, 600));
            for (int i = 0, x = 0, y = 0; i < opciones.length; i++, x += 185) {
                if (i % 4 == 0) {
                    if (i != 0) {
                        y += 185;
                    }
                    x = 0;
                }
                opciones[i].setBounds(x, y, 177, 153);
                panel.add(opciones[i]);
            }
            JOptionPane.showConfirmDialog(null, panel, al.getNombreAlumno()+" Saldo: "+al.getSaldo(), -1);
            File r = new File("src/ActualizacionInventario/RegistroVentas.txt");
            try {
                FileWriter fr = new FileWriter(r, true);
                fr.write("Alumno " + al.getNombreAlumno() + " compra: ");
 
                for (JRadioButton opcion : opciones) {
                    if (opcion.isSelected()) {
                        fr.write(opcion.getText() + " "+", ");
                    }
                }
                fr.write(fecha.format(date));
                fr.write("\n");
                fr.close();
 
            } catch (Exception o) {
            }
 
        } catch (FileNotFoundException e) {
            System.err.println(e.getCause());
        }
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Modificacion de un archivo de texto

Publicado por Billy Joel (876 intervenciones) el 22/03/2019 16:26:10
Podrías subir una muestra del archivo para ver como lo tienes estructurado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 98
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Modificacion de un archivo de texto

Publicado por Emmanuel (60 intervenciones) el 22/03/2019 16:38:15
ha ademas tengo un escrito para que me cree la lista de productos :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class DatosProductos {
 
public void registra(ConstructorProducto p){
    File f= new File("src/Persistencia/InventarioProductos.txt");
 
    try{
        FileWriter fw = new FileWriter(f,true);
        fw.write(p.getProducto()+", "+p.getCantidad()+", "+p.getPrecio()+"\n");
        fw.close();
 
    }catch(Exception e){
        System.err.println(e.getMessage());
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Modificacion de un archivo de texto

Publicado por Billy Joel (876 intervenciones) el 22/03/2019 18:24:40
No me queda muy claro el funcionamiento de tu programa pero te he hecho una clase que te puede ayudar a ordenar el flujo del programa.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
 
public class Inventario {
 
    private final String rutaInventario = "src/Persistencia/InventarioProductos.txt";
    private final String rutaVenta = "src/Persistencia/ventas.txt";
    private Map<String, ConstructorProducto> productos;
 
    public Inventario(){
        productos = new LinkedHashMap();
        try {
            Scanner lector = new Scanner(new FileInputStream(rutaInventario));
            while (lector.hasNext()) {
                String[] l = lector.nextLine().split(", ");
                if (l.length == 3) {
                    productos.put(l[0], new ConstructorProducto(l[0], Integer.parseInt(l[1]), Double.parseDouble(l[2])));
                }
            }
        } catch (FileNotFoundException ex) {
            ex.printStackTrace(System.out);
        }
    }
 
    /**
     * Registra el inventario en un archivo
     */
    public void guardarInventario() {
        FileWriter fichero = null;
        PrintWriter pw;
        try {
            fichero = new FileWriter(rutaInventario);
            pw = new PrintWriter(fichero);
            getProductos().forEach((k, v) -> {
                pw.println(k + ", " + v.getStock() + ", " + v.getPrecio());
            });
 
        } catch (IOException e) {
            e.printStackTrace(System.out);
        } finally {
            try {
                if (null != fichero) {
                    fichero.close();
                }
            } catch (IOException e2) {
                e2.printStackTrace(System.out);
            }
        }
    }
 
    /**
     * Registra una venta en el archivo de ventas
     * @param alumno
     * @param producto 
     */
    public void registrarVenta(ConstructorAlumno alumno, ConstructorProducto producto){
        //Reducimos la cantidad en el inventario
        productos.get(producto.getProducto()).setStock(
            productos.get(producto.getProducto()).getStock() - 1
        );
        guardarInventario();
 
        //Registramos la venta en el archivo
        //La nueva línea debe ir separada por comas (,) con los siguientes campos
        //Nombre del alumno, Nombre del producto, Fecha
 
        DateFormat format = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
        String fecha = format.format(Calendar.getInstance().getTime());
        String linea = alumno.getNombreAlumno() + ", " + producto.getProducto()+ ", " + fecha;
        FileWriter fichero = null;
        PrintWriter pw;
        try {
            fichero = new FileWriter(rutaVenta, true);
            pw = new PrintWriter(fichero);
            pw.println(linea);
        } catch (IOException e) {
            e.printStackTrace(System.out);
        } finally {
            try {
                if (null != fichero) {
                    fichero.close();
                }
            } catch (IOException e2) {
                e2.printStackTrace(System.out);
            }
        }
    }
 
    /**
     * @return the productos
     */
    public Map<String, ConstructorProducto> getProductos() {
        return productos;
    }
 
    /**
     * Devuelve un arreglo con los productos registrados en el archivo
     * @return 
     */
    public ConstructorProducto[] getProductosArray(){
        ConstructorProducto[] a = new ConstructorProducto[productos.size()];
        int c = 0;
        for(String k : productos.keySet()){
            a[c++] = productos.get(k);
        }
        return a;
    }
 
    /**
     * @param productos the productos to set
     */
    public void setProductos(Map<String, ConstructorProducto> productos) {
        this.productos = productos;
    }
 
    /*public static void main(String [] args){
        Inventario e = new Inventario();
        ConstructorProducto[] a = e.getProductosArray();
        for(ConstructorProducto p : a){
            System.out.print("Nombre: " + p.getProducto());
            System.out.print("\tStock: " + p.getStock());
            System.out.println("\tPrecio: " + p.getPrecio());
        }
    }*/
}

La única restricción que tiene esta clase es que la clase ConstructorProducto tenga un constructor como esto
1
2
3
4
5
public ConstructorProducto(String producto, Integer stock, Double precio){
    this.producto = producto;
    this.stock = stock;
    this.precio = precio;
}

Esta clase Inventario te ayudará a manejar el inventario. Solo debes crear un objeto de esta clase. Cuenta con el método registrarVenta que se encargará de registrar la venta en el archivo y rebajar el inventario. La clase maneja un Map de productos, pero si no estas familiarizado con los maps también cuenta con el método getProductosArray que te devolverá un arreglo con los productos actualizados.
La clase lee el archivo de inventario y genera el mapa de productos, también la puedes utilizar para registrar la venta.

Si tienes alguna duda solo escribe.
Saludos
;-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 98
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Modificacion de un archivo de texto

Publicado por Francisco Emmanuel (60 intervenciones) el 22/03/2019 21:46:29
una pregunta mas para que sirve el getStock ya que lo pongo en el codigo y me marca error
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Modificacion de un archivo de texto

Publicado por Billy Joel (876 intervenciones) el 22/03/2019 21:54:57
wow se me paso eso, que pena... el stock sería el equivalente a la cantidad que tiene en el inventario
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Modificacion de un archivo de texto

Publicado por Billy Joel (876 intervenciones) el 22/03/2019 21:58:19
por favor dime si has podido corregirlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 98
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Modificacion de un archivo de texto

Publicado por Emmanuel (60 intervenciones) el 22/03/2019 16:26:41
Y esto es lo que tengo en mi archivo de texto
Coca cola, 15, 12.0
donitas bimbo, 16, 17.0
Doritos, 10, 11.0
MAMUT, 3, 45.0
Mamut, 15, 4.0
Rufles, 10, 12.0

y el objetivo es que si selecciona ejemplo: doritos la cantidad de 10 disminuya en uno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar