【问题标题】:Writing arraylist on file in java在java中的文件上写入arraylist
【发布时间】:2016-10-29 18:18:14
【问题描述】:

所以我正在为一个类做一个 java 项目,但我被困住了。我必须做一个模拟购物车的程序,主菜单有 4 个选项 2 用于购买不同的产品,1 将产品添加到购物车,最后一个将购物车保存在文本文件中。程序现在正在写入文本文件。 (而且由于某种原因,当我进入选项 2 然后保存到它写入重复的数组中)已修复,仍然没有写入

package pack;
import java.util.*;
import java.io.*;
public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int op=0,codigo,garantia,tipo=0;
        double precio;
        String nombre,fecha;
        Alimento ali=null;
        Electronicos ele=null;
        Changuito cmp = new Changuito();
        FileWriter archivo=null;

        Scanner obj =new Scanner(System.in);
        System.out.println("Ingrese Que desea hacer");
        System.out.println("=======================");
        System.out.println("1-Tomar Producto Alimento");
        System.out.println("2-Tomar Producto Electronico");;
        System.out.println("4-Grabar en Archivo");
        op=obj.nextInt();
        while (op!=0){

                switch (op){

                    case 1: 
                        ali=null;
                        System.out.println("Ingrece Precio: ");
                        precio=obj.nextDouble();
                        System.out.println("Ingrese Codigo");
                        codigo=obj.nextInt();
                        System.out.println("Ingrese Nombre");
                        nombre=obj.next();
                        System.out.println("Ingrese Fecha:");
                        fecha=obj.next();
                        ali = new Alimento(codigo,precio,nombre,fecha);
                        tipo=1;
                    break;
                    case 2:
                        ele=null;
                        System.out.println("Ingrece Precio: ");
                        precio=obj.nextDouble();
                        System.out.println("Ingrese Codigo");
                        codigo=obj.nextInt();
                        System.out.println("Ingrese Nombre");
                        nombre=obj.next();
                        System.out.println("Ingrese Garantia:");
                        garantia=obj.nextInt();
                        ele = new Electronicos(codigo,precio,nombre,garantia);
                        tipo=2;
                        break;
                    case 3:
                        if (tipo==1){
                            cmp.cargararray(ali);

                        }
                        if (tipo==2){
                            cmp.cargararray(ele);


                        }
                        break;
                    case 4:
                        Changuito c = new Changuito();
                        c.grabararchivo();
                        break;
                        default:
                        break;
                }

                System.out.println("Ingrese Que desea hacer");
                System.out.println("=======================");
                System.out.println("1-Tomar Producto Alimento");
                System.out.println("2-Tomar Producto Electronico");
                System.out.println("3-Agregar El ultimo Producto que Ingreso Al changuito");
                System.out.println("4-Grabar en Archivo");
                op=obj.nextInt();

        }
        cmp.mostrararray();

    }

}

我有一个购物车类:

package pack;
import java.io.*;
import java.util.*;

public class Changuito {
    FileWriter archivo=null;
    PrintWriter pw=null;
    private ArrayList <Productos> vec;

    public Changuito() {
        super();
        vec = new ArrayList<Productos>();
    }

    public ArrayList<Productos> getVec() {
        return vec;
    }

    public void setVec(ArrayList<Productos> vec) {
        this.vec = vec;
    }
    public void cargararray(Productos obj){
        vec.add(obj);
    }
    public void mostrararray(){
        for (Productos cmp:vec){
                System.out.println("Nombre: " +cmp.nombre);
                System.out.println("Codigo: " +cmp.codigo);
                System.out.println("Precio: " +cmp.precio);
                if (cmp instanceof Alimento){
                    System.out.println("Fecha: " +((Alimento) cmp).fecha);
                }
                if (cmp instanceof Electronicos){
                    System.out.println("Garantia: " +((Electronicos)cmp).garantia);
                }
            }
        }
    public void grabararchivo(){
        try{
            archivo = new FileWriter("D:\\archivo.txt");
            pw= new PrintWriter (archivo);
            for (Productos cmp:vec){
                pw.println(cmp.nombre);
                pw.println(cmp.codigo);
                pw.println(cmp.precio);
                }
            }catch(Exception e){
                e.printStackTrace();
            }
        finally{
            try{
                if (archivo !=null)
                    archivo.close();
            }
            catch(Exception e2){
                e2.printStackTrace();
            }
        }
    }
}

【问题讨论】:

    标签: java file arraylist


    【解决方案1】:

    你错过了休息时间;在您的第二个和第三个案例结束时声明。

                    case 2:
                        ele=null;
                        System.out.println("Ingrece Precio: ");
                        precio=obj.nextDouble();
                        System.out.println("Ingrese Codigo");
                        codigo=obj.nextInt();
                        System.out.println("Ingrese Nombre");
                        nombre=obj.next();
                        System.out.println("Ingrese Garantia:");
                        garantia=obj.nextInt();
                        ele = new Electronicos(codigo,precio,nombre,garantia);
                        tipo=2;
                        break; //missing this
                    case 3:
    

    【讨论】:

    • 修复了数组中的重复项仍然没有写入
    • 是重复写入,还是根本不写入?
    • 完全写入txt文件,重复解决
    • 看起来您的文件编写器仅在您选择选项 4 时被调用:grabararchivo()。这将创建一个具有空 ArrayList() 的 Changuito.java 新实例。您可以在 Main.java 中跟踪这些,但从不将它们传递到 Changuito.java。
    • 谢谢,我只需要从 txt 更改。到 cmp。
    猜你喜欢
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    相关资源
    最近更新 更多