当前位置: 首页 > 知识库问答 >
问题:

将客户对象从Java Swing GUI保存到文本文件

徐茂材
2023-03-14

我正试图将我的客户Java对象保存到一个文本文件中,然而,每当我尝试执行GUI并输入字段时,输出是这样的:文件中混淆的字符和数据

我根本不知道怎么解决这个问题。

下面是我的保存到文件代码:

    public void saveCustomerToFile(){
    try{
        FileOutputStream file = new FileOutputStream("Customers.txt");
        ObjectOutputStream outputFile  = new ObjectOutputStream(file);
        
        for (int i = 0 ; i < customers.size() ; i++){
            outputFile.writeObject(customers.get(i));
            
        }

        JOptionPane.showMessageDialog(null , "Successfully Saved");
        this.dispose();

    }
    catch(IOException e){
        JOptionPane.showMessageDialog(null , e.getMessage());
    }
}

customer对象存储在数组中:Customers=new arraylist ();

当按下submit按钮并将其保存到customer对象数组时,将创建My customer对象,如以下代码所示:

    private void submitButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                              
    // Needed Variables
    Object selected = refnameCombo1.getSelectedItem();
    String refNumber ="0";
    String customerName ="0";
    //
    

    
    if (addressLine1.getText().isEmpty() || addressLine2.getText().isEmpty() || addressCity.getText().isEmpty()||addressCounty.getText().isEmpty()){
        JOptionPane.showMessageDialog(null, "Please Enter All Fields");
    }// this if gives us an optionpane if the fields are empty
    else{// else, check if reference number or name in the following if 
        if(selected.toString().equals("Reference Number")){ // If reference number is in combo box then 
            refNumber = namerefInput1.getText().trim();
            customerName = "not provided";
            }   
        else{
            customerName = namerefInput1.getText().trim();// else name is in combo box then 
             refNumber = "-1";
            }
        
        // then do  the other variables after if/else
        String line1 = addressLine1.getText().trim(); 
        String line2 = addressLine2.getText().trim(); 
        String city = addressCity.getText().trim(); 
        String county = addressCounty.getText().trim();   
        
        System.out.println(customerName);
        Customer customer = new Customer(Integer.parseInt(refNumber), customerName, line1 ,line2, city, county);
        customers.add(customer); // Adding it to the array.
        saveCustomerToFile();
    }

下面是GUI布局

共有1个答案

戴凯歌
2023-03-14

摘自https://docs.oracle.com/javase/7/docs/api/java/io/objectoutputstream.html

writeObject方法负责为其特定类写入对象的状态,以便相应的readObject方法可以还原它。方法不需要关注属于对象的超类或子类的状态。通过使用writeObject方法将单个字段写入ObjectOutputStream或使用DataOutput支持的基元数据类型的方法来保存状态。

序列化不会写出任何未实现java.io.Serializable接口的对象的字段。不可序列化的对象的子类可以是可序列化的。在这种情况下,非序列化类必须有一个no-arg构造函数,以允许初始化其字段。在这种情况下,子类负责保存和恢复不可序列化类的状态。这类的字段通常是可访问的(public、package或protected),或者有get和set方法可用于恢复状态。

您可以使用Java序列化器(使用'write object'),但在本例中,您应该通过实现Java.io.Serializable来正确使用它。Java序列化器不知道将对象序列化为人类可读的格式。为此,您应该使用Gson或jackson等。

即使该文件中的数据不能被人读取,它也应该使用“read object”正确反序列化您的对象。至少,当将单个对象保存到该流中时,应该直接序列化整个列表,而不是将每个对象单独保存到该文件中,因为我认为序列化器无法在这样的文件中追加对象。

 类似资料:
  • 问题内容: 我想将一个对象保存到文件中,然后轻松地从文件中读取它。作为一个简单的示例,可以说我有以下3d数组: 是否有一个简单的Ruby API,无需编程解析器即可解释文件中的数据,就可以用来实现此目的?在示例中,我给出了一个简单的例子,但是随着对象变得越来越复杂,使对象持久化变得很烦人。 问题答案: 参见元帅:http : //ruby- doc.org/core/classes/Marshal

  • 本文向大家介绍Java将对象保存到文件中/从文件中读取对象的方法,包括了Java将对象保存到文件中/从文件中读取对象的方法的使用技巧和注意事项,需要的朋友参考一下 1.保存对象到文件中 Java语言只能将实现了Serializable接口的类的对象保存到文件中,利用如下方法即可: 参数obj一定要实现Serializable接口,否则会抛出java.io.NotSerializableExcept

  • 我想知道你如何从一个文本文件中获取信息,并将其写入单独的数组列表中。 如你所见,上面有哺乳动物、鸟类和鱼类的群体!所以我将这些数组列表声明为。 目标是将人类、狗、老鼠和猫的字符串对象写入mammalList。然后将鸟写到鸟列表,将鱼写到鱼列表。 我知道如何使用缓冲读取器读取单个数组列表中的文本文件,但我不知道如何将每个动物分为各自的类别。非常感谢你的帮助! 下面是在Freestyle 076的帮助

  • 我对java swing很陌生,但我正在创建一个库存管理程序,我现在有我的窗口注册表,用户可以插入、姓名、地址、用户名、密码等,并且我在下面有一个按钮来保存所有数据。我希望能够按下保存按钮,将所有数据保存到一个新的userObject,我的问题是如何关联每个文本字段数据,以便将它们保存到保存按钮中的新对象。有人能给我一些关于如何做到这一点的建议吗? 谢谢 我以这种方式尝试了代码: private

  • 问题内容: 我看到过很多不同的文章,涉及到您应该以何种方式将对象序列化到文件,并且所有这些在本质上在执行方式和最佳实践方面存在冲突。因此,这就是我要保存的内容: 我们可以假设configArgs的大小已知,我需要制作一个文件,这就是到目前为止的内容。 问题答案: 好吧,我想,您想将对象直接写入文件 我只是提供了重要的代码。通过异常处理来实现。

  • 问题内容: 我想知道如何将PHP变量保存到txt文件,然后再次检索它们。 例: 有一个输入框,提交后,在输入框中写入的内容将保存到文本文件中。稍后,需要将结果作为变量返回。因此,可以说变量是$ text,我需要将其保存到文本文件中并能够再次取回它。 问题答案: 这应该可以执行您想要的操作,但是如果没有更多上下文,我无法确定。 将$ text写入文件: 再次检索它: