Moin,
ich möchte gerne mit NIO Files.walk() und JAXB einen Verzeichnisbaum rekursiv in eine XML-Datei umwandeln. Mein aktueller Stand sieht wie folgt aus:
Es ist leider ewig her, daß ich mal mit Java programmiert habe, daher bin ich für jeden Verbesserungsvorschlag dankbar. Ich habe leider nicht verstanden, wie ich dem Attribut "name" den Namen des aktuellen Ordners oder der Datei zuweise. Vermutlich ist es trivial, aber ich konnte in den Codeschnipseln und Dokumentationen nichts passendes finden - oder ich habe es gelesen und nicht verstanden.
Vielen Dank im voraus!
ich möchte gerne mit NIO Files.walk() und JAXB einen Verzeichnisbaum rekursiv in eine XML-Datei umwandeln. Mein aktueller Stand sieht wie folgt aus:
Java:
package org.nodez.reader;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/*
* Convert file structure into tree datatype
* Version: 0.1
* Date: 2017-11-26
*/
public class Filesystem {
// Constants
private static final String OUTPUT_FILE = "q:\\project\\nodez\\output\\FilesystemTree.xml";
// Variables
private static Document doc;
public static void main(String[] args) {
createOutputFile();
Path root = Paths.get(args[0]);
try (Stream<Path> stream = Files.walk(root)) {
Element node = doc.createElement("node");
Attr name = doc.createAttribute("name");
name.setValue("..."); // <-- how do I get the name of the folder or file?
// node.setAttribute("name", "...");
doc.appendChild(node);
} catch (IOException e) {
e.printStackTrace();
}
writeOutputFile();
}
private static void createOutputFile() {
try {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("tree");
doc.appendChild(rootElement);
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}
private static void writeOutputFile() {
try {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(OUTPUT_FILE));
transformer.transform(source, result);
System.out.println("File saved!");
} catch (TransformerException e) {
e.printStackTrace();
}
}
}
Es ist leider ewig her, daß ich mal mit Java programmiert habe, daher bin ich für jeden Verbesserungsvorschlag dankbar. Ich habe leider nicht verstanden, wie ich dem Attribut "name" den Namen des aktuellen Ordners oder der Datei zuweise. Vermutlich ist es trivial, aber ich konnte in den Codeschnipseln und Dokumentationen nichts passendes finden - oder ich habe es gelesen und nicht verstanden.
Vielen Dank im voraus!