Java XML 使用 Transformer.transform 解析,它自己可以正常工作,使用 Maven 时不起作用
Java XML parsing using Transformer.transform, works fine on its own, does not work when using Maven
The only Question i found that seemed similiar but sadly this didnt help
您好,我已经在这个问题上停留了几个小时了。
我正在尝试将新数据写入一个预先存在的 XML 文件(/在它尚不存在时创建它)以用于我正在为 uni 编程的小型游戏的数据收集。
我为此创建了一个 DataRecorder class,在 class
中使用 main 进行测试时工作正常
private Transformer transformer;
private Document documentWriter;
private DocumentBuilder documentBuilder;
private Element eventList;
private static final String RECORDED_DATA = "Game/src/main/resources/recordedData.xml";
public DataRecorder() {
recordedData = new ArrayList<Data>();
this.username = System.getProperty("user.name");
this.newData = false;
try {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
this.transformer = transformerFactory.newTransformer();
} catch (Exception e) {
System.out.println("Error when creating DataRecorder: Transformer");
}
File tempFile = new File(RECORDED_DATA);
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
this.documentBuilder = dbf.newDocumentBuilder();
if (!tempFile.exists()) {
//Creates new Document if it doesnt exist
this.documentWriter = this.documentBuilder.newDocument();
} else {
this.documentWriter = this.documentBuilder.parse(RECORDED_DATA);
}
} catch (Exception e) {
System.out.println("Error when creating DataRecorder: Document Writer");
}
Element root;
if (!tempFile.exists()) {
//Creates new Document if it doesnt exist
root = this.documentWriter.createElement("recordedData");
this.documentWriter.appendChild(root);
} else {
root = this.documentWriter.getDocumentElement();
}
Element player = this.documentWriter.createElement("Player");
player.setAttribute("name", this.username);
root.appendChild(player);
this.eventList = this.documentWriter.createElement("EventList");
this.eventList.setAttribute("date", Date.from(java.time.ZonedDateTime.now().toInstant()).toString());
this.eventList.setAttribute("timezone", java.time.ZonedDateTime.now().getZone().toString());
player.appendChild(this.eventList);
DOMSource source = new DOMSource(this.documentWriter);
StreamResult result = new StreamResult(System.getProperty("user.dir") + "/src/main/resources/recordedData.xml");
try {
this.transformer.transform(source, result);
} catch (Exception e) {
System.out.println("Error when creating DataRecorder: Could not write System Name and Date");
System.out.println(e);
}
}
这将创建一个 XML 文件,如下所示
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<recordedData>
<Player name="Name">
<EventList date="Wed Jun 24 21:34:46 CEST 2020" timezone="Europe/Berlin"/>
</Player>
</recordedData>
问题是,当我用它自己的 Main 执行这个 Class 时,它只是添加了一些新行(这是我想要它做的),而当使用 Maven 执行时,它完全重写了 xml 文件.
你的路径是你的资源文件夹,资源文件夹是一个maven便利文件夹,当你运行 maven构建时那个文件夹不存在。当 Maven 构建 运行s.
时,该文件夹的内容被复制到 target/classes
文件夹
尝试使用源代码存储库之外的文件夹
The only Question i found that seemed similiar but sadly this didnt help
您好,我已经在这个问题上停留了几个小时了。 我正在尝试将新数据写入一个预先存在的 XML 文件(/在它尚不存在时创建它)以用于我正在为 uni 编程的小型游戏的数据收集。 我为此创建了一个 DataRecorder class,在 class
中使用 main 进行测试时工作正常private Transformer transformer;
private Document documentWriter;
private DocumentBuilder documentBuilder;
private Element eventList;
private static final String RECORDED_DATA = "Game/src/main/resources/recordedData.xml";
public DataRecorder() {
recordedData = new ArrayList<Data>();
this.username = System.getProperty("user.name");
this.newData = false;
try {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
this.transformer = transformerFactory.newTransformer();
} catch (Exception e) {
System.out.println("Error when creating DataRecorder: Transformer");
}
File tempFile = new File(RECORDED_DATA);
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
this.documentBuilder = dbf.newDocumentBuilder();
if (!tempFile.exists()) {
//Creates new Document if it doesnt exist
this.documentWriter = this.documentBuilder.newDocument();
} else {
this.documentWriter = this.documentBuilder.parse(RECORDED_DATA);
}
} catch (Exception e) {
System.out.println("Error when creating DataRecorder: Document Writer");
}
Element root;
if (!tempFile.exists()) {
//Creates new Document if it doesnt exist
root = this.documentWriter.createElement("recordedData");
this.documentWriter.appendChild(root);
} else {
root = this.documentWriter.getDocumentElement();
}
Element player = this.documentWriter.createElement("Player");
player.setAttribute("name", this.username);
root.appendChild(player);
this.eventList = this.documentWriter.createElement("EventList");
this.eventList.setAttribute("date", Date.from(java.time.ZonedDateTime.now().toInstant()).toString());
this.eventList.setAttribute("timezone", java.time.ZonedDateTime.now().getZone().toString());
player.appendChild(this.eventList);
DOMSource source = new DOMSource(this.documentWriter);
StreamResult result = new StreamResult(System.getProperty("user.dir") + "/src/main/resources/recordedData.xml");
try {
this.transformer.transform(source, result);
} catch (Exception e) {
System.out.println("Error when creating DataRecorder: Could not write System Name and Date");
System.out.println(e);
}
}
这将创建一个 XML 文件,如下所示
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<recordedData>
<Player name="Name">
<EventList date="Wed Jun 24 21:34:46 CEST 2020" timezone="Europe/Berlin"/>
</Player>
</recordedData>
问题是,当我用它自己的 Main 执行这个 Class 时,它只是添加了一些新行(这是我想要它做的),而当使用 Maven 执行时,它完全重写了 xml 文件.
你的路径是你的资源文件夹,资源文件夹是一个maven便利文件夹,当你运行 maven构建时那个文件夹不存在。当 Maven 构建 运行s.
时,该文件夹的内容被复制到target/classes
文件夹
尝试使用源代码存储库之外的文件夹