Hallo,
ich bekomme die Dateiausgabe nicht richtig hin.
Erstelle ich eine "Sammel1.xml", ist noch alles in Ordnung. Erstelle ich danach jedoch noch eine, schreibt Tomcat in den Zielordner "Sammel1.xml2.xml", statt "Sammel2.xml". Eine 3. Datei würde entsprechend noch länger.
Ich müsste da doch in dem Programm sicher den Speicher vom Tomcat leeren, oder so was in der Art?
Hier die Klasse (gekürzt):
[highlight=Java]
// fasst alle Bestellungen eines Verzeichnisses zu einer Sammelbestellung zusammen
public class Sammelbestellung
{
private static Map<Integer, Element> elementList = new HashMap<Integer, Element>();
// Klasse zur Bestimmung des Verzeichnispfades
static Konfiguration k = new Konfiguration();
// Klasse zur Generierung des Namens in der Form
// Sammelbestellung-YYYYMMDDHHMMSS.xml
static nameErstellen ne = new nameErstellen();
// Ausgabestring mit Verzeichnisangabe und Dateinamen
public static String ausgabe = "";
// Konstruktor mit komplettem Ablauf
public Sammelbestellung()
{
File xmlPath = new File(k.getBestelleingang());
File[] verzeichnisList = xmlPath.listFiles();
File[] xmlList = filtereListe(verzeichnisList);
for (int i = 0; i < xmlList.length; i++)
{
File xmlDatei = xmlList;
readAllArtikelOfXmlFile(xmlDatei);
}
createSammelXmlFile();
}
/**
* liest alle Artikel-Elemente der xml-Datei und
* schreibt diese in eine Map, wobei doppelte Id´s
* nicht zulässig sind und eine Mengenerhoehung ausloesen
* (ID 5, Menge 4 + ID 5, Menge 2 --> ID 5, Menge 6)
*/
private static void readAllArtikelOfXmlFile(File f)
{
// ...
}
/**
* erzeugt die "Sammel-xxxx.xml" aus Map
*/
private static void createSammelXmlFile()
{
try
{ // liest alle Elemente aus
// fuegt Elemente in neuem Dokument wieder zusammen
Element rootElement = new Element("Bestellung");
Set<Integer> keySet = elementList.keySet();
Iterator<Integer> iterat = keySet.iterator();
while (iterat.hasNext())
{
Element tr = elementList.get(iterat.next());
// Löse Artikel von der alten Struktur
tr.detach();
rootElement.addContent(tr);
}
// und hier irgendwo liegt das Problem
Document sammelDoc = new Document(rootElement);
XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
ausgabe = new String(k.getBestellausgang()+ne.sammelname());
FileOutputStream fout = new FileOutputStream(new File(ausgabe));
outputter.output(sammelDoc, fout);
ausgabe = ""; // mein Versuch, den gespeicherten Namen auf "leer" zu setzen"
}
catch (Exception e)
{
System.err.println("Fehler " + e);
e.printStackTrace();
}
}
/**
* filtert uebergebene Dateiliste nach angegebenen Kriterien
* gibt Liste mit gefilterten Dateien zurueck
*/
private static File[] filtereListe (File[] s)
{
// ...
}
}
[/highlight]
Wäre über einen Tipp dankbar,
Lars
ich bekomme die Dateiausgabe nicht richtig hin.
Erstelle ich eine "Sammel1.xml", ist noch alles in Ordnung. Erstelle ich danach jedoch noch eine, schreibt Tomcat in den Zielordner "Sammel1.xml2.xml", statt "Sammel2.xml". Eine 3. Datei würde entsprechend noch länger.
Ich müsste da doch in dem Programm sicher den Speicher vom Tomcat leeren, oder so was in der Art?
Hier die Klasse (gekürzt):
[highlight=Java]
// fasst alle Bestellungen eines Verzeichnisses zu einer Sammelbestellung zusammen
public class Sammelbestellung
{
private static Map<Integer, Element> elementList = new HashMap<Integer, Element>();
// Klasse zur Bestimmung des Verzeichnispfades
static Konfiguration k = new Konfiguration();
// Klasse zur Generierung des Namens in der Form
// Sammelbestellung-YYYYMMDDHHMMSS.xml
static nameErstellen ne = new nameErstellen();
// Ausgabestring mit Verzeichnisangabe und Dateinamen
public static String ausgabe = "";
// Konstruktor mit komplettem Ablauf
public Sammelbestellung()
{
File xmlPath = new File(k.getBestelleingang());
File[] verzeichnisList = xmlPath.listFiles();
File[] xmlList = filtereListe(verzeichnisList);
for (int i = 0; i < xmlList.length; i++)
{
File xmlDatei = xmlList;
readAllArtikelOfXmlFile(xmlDatei);
}
createSammelXmlFile();
}
/**
* liest alle Artikel-Elemente der xml-Datei und
* schreibt diese in eine Map, wobei doppelte Id´s
* nicht zulässig sind und eine Mengenerhoehung ausloesen
* (ID 5, Menge 4 + ID 5, Menge 2 --> ID 5, Menge 6)
*/
private static void readAllArtikelOfXmlFile(File f)
{
// ...
}
/**
* erzeugt die "Sammel-xxxx.xml" aus Map
*/
private static void createSammelXmlFile()
{
try
{ // liest alle Elemente aus
// fuegt Elemente in neuem Dokument wieder zusammen
Element rootElement = new Element("Bestellung");
Set<Integer> keySet = elementList.keySet();
Iterator<Integer> iterat = keySet.iterator();
while (iterat.hasNext())
{
Element tr = elementList.get(iterat.next());
// Löse Artikel von der alten Struktur
tr.detach();
rootElement.addContent(tr);
}
// und hier irgendwo liegt das Problem
Document sammelDoc = new Document(rootElement);
XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
ausgabe = new String(k.getBestellausgang()+ne.sammelname());
FileOutputStream fout = new FileOutputStream(new File(ausgabe));
outputter.output(sammelDoc, fout);
ausgabe = ""; // mein Versuch, den gespeicherten Namen auf "leer" zu setzen"
}
catch (Exception e)
{
System.err.println("Fehler " + e);
e.printStackTrace();
}
}
/**
* filtert uebergebene Dateiliste nach angegebenen Kriterien
* gibt Liste mit gefilterten Dateien zurueck
*/
private static File[] filtereListe (File[] s)
{
// ...
}
}
[/highlight]
Wäre über einen Tipp dankbar,
Lars