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