Hallo,
ich möchte einen Reader schreiben, der minutenweise prüft, ob in einem absoluten Pfad eine neue xml-Datei (Bestellung) eingegangen ist. Den Namen dieser Datei weiß ich allerdings nicht vorher.
Später möchte ich diese Datei dann einem XMLParser (DOM) unter einem festen Dateinamen zur Verfügung stellen und den Parser aufrufen (aber nur, wenn eine neue Bestellung da ist).
Ich bin mir nicht ganz so sicher, ob ich nun die "alten" Dateien dann löschen sollte oder ob ich noch eine Methode zum Vergleichen implementieren sollte.
Einige Zeilen Code habe ich bereits, wenn aber einer mal drüber schauen würde, wäre das echt klasse. Habe nämlich festgestellt, daß ich Probleme habe beim API verstehen.
Der Thread ist noch nicht implementiert, genauso wie der Parser-Aufruf. Da es keine GUI gibt, wird die Ausgabe auf der Konsole erfolgen, und wenn wir soweit sind, in einem LogBuch abgespeichert (gibt es davor evtl. schon implementierten Code?)
Code:
ich möchte einen Reader schreiben, der minutenweise prüft, ob in einem absoluten Pfad eine neue xml-Datei (Bestellung) eingegangen ist. Den Namen dieser Datei weiß ich allerdings nicht vorher.
Später möchte ich diese Datei dann einem XMLParser (DOM) unter einem festen Dateinamen zur Verfügung stellen und den Parser aufrufen (aber nur, wenn eine neue Bestellung da ist).
Ich bin mir nicht ganz so sicher, ob ich nun die "alten" Dateien dann löschen sollte oder ob ich noch eine Methode zum Vergleichen implementieren sollte.
Einige Zeilen Code habe ich bereits, wenn aber einer mal drüber schauen würde, wäre das echt klasse. Habe nämlich festgestellt, daß ich Probleme habe beim API verstehen.
Der Thread ist noch nicht implementiert, genauso wie der Parser-Aufruf. Da es keine GUI gibt, wird die Ausgabe auf der Konsole erfolgen, und wenn wir soweit sind, in einem LogBuch abgespeichert (gibt es davor evtl. schon implementierten Code?)
Code:
Code:
import java.rmi.*;
import java.io.*;
/**
*
* erstellt: 11.07.04
*
*
* Der Reader wird vom Server initiiert und prüft minutenweise, ob eine neue
* XML-Datei im StandardVerzeichnis abgelegt worden ist. Wenn ja, wird der
* Name der Datei an den XMLParser weitergeleitet und die Datei in einen
* temporären Ordner weitergeleitet.
*
*/
public class Reader
extends Thread {
public String fileName; //Name der DAtei
public String temp;
public String dest = "c:/"; //Ziel für XML-File
public static File file; //leere Datei
public String prefile = "order"; //Präfix für temporären Dateinamen
public String suffile = ".xml"; //Suffix für temporären Dateinamen
public File tempFile; //temporäre Datei zum Löschen
//Default-Konstruktor
public Reader() {}
//Methoden
//Thread, der vom Server gestartet wird und sich für eine Minute schlafen legt
public void run() {
}
/**
* Auslesen des neuen XML-Dateinamens, kopieren in eine temporäre Datei
* zum Auslesen für den XML-Parser.
* @return Rückgabe
*/
public String search() {
//Durchsuchen des absoluten Pfades nach neuer XML-Datei
if (fileName.toLowerCase().endsWith(".xml")) {
//Name der Datei holen
fileName = getName();
System.out.println("Es wurde die Datei " + fileName + "gefunden");
//leere Datei mit bestimmten Namen erzeugen
createTempFile(prefile, suffile);
System.out.println("leere Datei zum Auslesen wurde erstellt");
//leere Datei als String umformen, um Dateiinhalte zu übertragen
dest = file.getName();
//Dateiinhalte kopieren
copy(fileName, dest);
System.out.println("Dateiinhalte wurden übernommen");
//Löschen der alten XML-Datei
fileDel(fileName);
}
else {
System.out.println("Keine neue Bestellungen vorhanden");
}
return fileName;
}
/**
* Erstellen einer leeren Datei mit einem vorher bestimmten Dateinamen
* @param prefile Präfix für temporären Dateinamen
* @param suffile Suffix für temporärem Dateinamen
* @return Rückgabe des Dateinamens
*/
public static File createTempFile(String prefile, String suffile) {
return file;
}
/**
* Löschen der Überwiesenen Datei
* @param fileName Filedeskriptor zum Löschen der Datei
*/
public void fileDel(String fileName) {
//Filedeskriptor anlegen
tempFile = new File(fileName);
System.out.println("Datei " + tempFile + "wird gelöscht!");
//Löschen der Datei
tempFile.delete();
}
/**
* Kopieren der aktuellen XML-Datei in TEMP-Verzeichnis
* @param src Quellverzeichnis
* @param dest Zielverzeichnis
*/
public void copy(String fileName, String dest) {
try {
copy(new FileInputStream(fileName), new FileOutputStream(dest));
System.out.println("Datei wurde in Verzeichnis kopiert");
}
catch (IOException e) {
e.printStackTrace();
}
}
/**
* Öffnen der Datei, damit diese kopiert werden kann
* @param fis Stream, der die Quelldatei öffnet
* @param fos Stream, der die Zieldatei öffnet
*/
static void copy(InputStream fis, OutputStream fos) {
try {
byte buffer[] = new byte[0xffff];
int nbytes;
//Puffern der Bytes
while ( (nbytes = fis.read(buffer)) != -1)
//Schreiben der Bytes
fos.write(buffer, 0, nbytes);
}
catch (IOException e) {
e.printStackTrace();
}
//Schließen der Datei bzw. der Dateiströme
finally {
if (fis != null)
try {
fis.close();
}
catch (IOException e) {
e.printStackTrace();
}
try {
if (fos != null)
fos.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}