为了账号安全,请及时绑定邮箱和手机立即绑定

让 JavaBean 写入 XML 时遇到问题

让 JavaBean 写入 XML 时遇到问题

倚天杖 2024-01-28 16:29:41
我的代码将名称写入 XML 文档,但不写入任何测试分数。即使我改了名字,考试成绩也总是输出0。我将非常感谢任何帮助弄清楚为什么会出现这种情况的帮助。我已附加带有 main 方法的类和带有构造函数的类。感谢您的帮助!import java.beans.XMLDecoder;import java.beans.XMLEncoder;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.Scanner;public class Studentp194Runner {public static void main(String[] args){               Studentp194 s1 = new Studentp194();    Scanner reader = new Scanner(System.in);    System.out.print("Enter student name: ");    s1.setName(reader.nextLine());    System.out.print("Enter the student's first score: ");    s1.setScore(1, reader.nextInt());    System.out.print("Enter the student's second score: ");    s1.setScore(2, reader.nextInt());    System.out.print("Enter the student's third score: ");    s1.setScore(3, reader.nextInt());    try    {        FileOutputStream fos = new FileOutputStream(new File("./student.xml"));        XMLEncoder encoder = new XMLEncoder(fos);        encoder.writeObject(s1);        encoder.close();        fos.close();    }    catch(IOException ex)    {        ex.printStackTrace();    }    try    {        FileInputStream fis = new FileInputStream(new File("./student.xml"));        XMLDecoder decoder = new XMLDecoder(fis);        Studentp194 p2 = (Studentp194)decoder.readObject();        decoder.close();        fis.close();        System.out.println("Student 1 name: " + p2.getName());        System.out.println("Test 1: " + p2.getScore(1));        System.out.println("Test 2: " + p2.getScore(2));        System.out.println("Test 3: " + p2.getScore(3));    }    catch(IOException ex)    {        ex.printStackTrace();    }   }}
查看完整描述

1 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

最简短的答案在技术上是正确的,但对于不熟悉 Java bean 的人来说毫无用处:Studentp194没有score属性。因此,不存在的score属性不会被 编码为 XML XMLEncoder


对于任何具有名为 、foo类型为 的Java Beans 属性的任意类Foo,它必须有一个public Foo getFoo()方法和一个public void setFoo(Foo foo)方法。正如你所看到的,你的Studentp194类没有public int getScore()方法,也没有方法public void setScore(int score)

(当然,Java Beans 规范实际上并不强制要求这些是方法所需的名称。您可以通过多种方式自定义它们,包括使用 classes BeanInfo,但这远远超出了本问题的范围。)

回到你的问题和代码,XMLEncoder不会对你的类设计有帮助,因为你的getScore方法需要参数,并且你的setScore方法需要多个参数。因此它们不是 Java Beans 属性;而是 Java Beans 的属性。因此XMLEncoder不会对它们进行编码。

假设您出于某种原因想要继续使用XMLEncoder.然后您必须重构您的类以符合 Java Beans 规范。我将把它作为练习留给读者。 :-)

我猜这是某种作业,而使用XMLEncoder是作业的要求。如果我错了,请查看不同的文件格式来存储和检索您的信息。

Studentp194如果我是对的,那么您想要查看您的班级在逻辑上与分数集合或数组相关联的事实。您可能希望实际创建一个类来表示测试分数,并将此类测试分数的集合存储在您的Studentp194类中。更好的是,也许您的Studentp194类希望与另一个类相关,例如Transcript可以正确存储此信息的类或类似的类。有关这种分解问题的分解方法的更多信息,请阅读“第三范式”并从那里开始。我希望这对您有所帮助,欢迎来到 StackOverflow。


查看完整回答
反对 回复 2024-01-28
  • 1 回答
  • 0 关注
  • 30 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信