JAXB文件在从javafx环境提供时覆盖旧文件。如何解决这个问题?

JAXB文件在从javafx环境提供时覆盖旧文件。如何解决这个问题?,java,javafx,jaxb,Java,Javafx,Jaxb,我试图在运行时将凭据放入XML文件中,但XML正在替换新值,同时如何解决此问题 我需要将新凭据添加到现有文件中,并根据给定的名称检索它们 提前谢谢 对社区来说有点新鲜!如果有任何惯例上的错误,请不要费心 login.java public class LoginExample extends Application { CredentialsBean credentials ; @Override public void start(Stage primaryStage)

我试图在运行时将凭据放入XML文件中,但XML正在替换新值,同时如何解决此问题

我需要将新凭据添加到现有文件中,并根据给定的名称检索它们

提前谢谢

对社区来说有点新鲜!如果有任何惯例上的错误,请不要费心

login.java

public class LoginExample extends Application {
    CredentialsBean credentials ;
    @Override
    public void start(Stage primaryStage) throws Exception {
    Button submit =new Button("Submit");
    Button convert = new Button("Convert");
    GridPane root = new GridPane();
    Label showuname =  new Label();
    Label showupwd = new Label();

    Text name = new Text("Name");
    root.add(name,0,0);
    TextField uname = new TextField();
    root.add(uname, 1, 0);

    Text password = new Text("Password");
    root.add(password,0,1);
    PasswordField upwd = new PasswordField();
    root.add(upwd, 1,1);
    root.add(submit, 1, 2);
    root.add(convert, 1, 3);

    root.add(showuname, 2, 6);
    root.add(showupwd, 2, 7);


    Scene sc = new Scene(root,400,400);
    primaryStage.setScene(sc);
    primaryStage.show();



    submit.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
        String name=uname.getText();
        try {
            String pwd= Base64.getEncoder().encodeToString(upwd.getText().getBytes("utf-8"));          
            credentials= new CredentialsBean(name,pwd);
            jaxbObjectToXML(credentials);

        } catch (IOException e) {
            e.printStackTrace();
        }
        }

        private void jaxbObjectToXML(CredentialsBean credentials) throws FileNotFoundException {
         try
                {
                    //Create JAXB Context
                    JAXBContext jaxbContext = JAXBContext.newInstance(CredentialsBean.class);

                    //Create Marshaller
                    Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

                    //Required formatting??
                    jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

                    File file2 = new File("C:/Users/User/Desktop/encoder.xml");
                    jaxbMarshaller.marshal(credentials, file2);


                } catch (JAXBException e) {
                    e.printStackTrace();
                }
        }
    });
}

    public static void main(String args[]) 
    { 

        launch(args); 
    } 
}

我不明白你的问题。每次调用jaxbMarshaller.marshaller时,都要封送“”C:/Users/User/Desktop/encoder.xml的内容将重写。读取数据,更新数据,然后将更新后的数据保存回文件。如果XML文件可以记录多个凭据,则需要一个容器元素;不确定在使用JAXB时是否严格要求另一个Java类。不理解您的问题。每次调用jaxbMarshaller.marshall时,“C:/Users/User/Desktop/encoder.xml”的内容都将被重写。读取数据,更新数据,然后将更新的数据保存回文件。如果xml文件可以记录多个凭据,则需要一个容器元素;不确定在使用JAXB时是否严格要求另一个Java类。
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class CredentialsBean {

    private String name;
    private String password;
    public CredentialsBean() {
    }
    public CredentialsBean(String name, String password) {
    this.name = name;
    this.password = password;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
    return "CredentialsBean [name=" + name + ", password=" + password + "]";
    }


}