Hallo wahrscheinlich habt ihr schon satt von mir aber ich brauch eure Hilfe . Und zwar verschiebe ich XML Dateien von einem Ordner in anderen, und schreibe das Quell- und Zielverzeichnis in die DB. Danach werden die verschobenen Dateien entpackt (sammelzip). Deren namen bzw datum (subString) die in den Dateinamen vorhanden sind, werden auch in die DB eingetragen. Die Eintragung dieser Merkmale habe ich hinbekommen. Nun muss ich von den XML-Dateien eine Spalte immer auslesen. Beim Auslesen ist manchmal die Spalte frei bzw existiert der XPATH nicht und es kommt ein Fehler, wie kann ich diesen Fehler umgehen?? Fehlermeldung vom XPATH:
[Fatal Error] H_11C6A2C2C55A_20110727_101518.xml:9903:1: Ungültiges XML-Zeichen (Unicode: 0x0) wurde im Elementcontent des Dokuments gefunden.
org.xml.sax.SAXParseException; systemId: file:/C:/metin8y/eclipse/eclipse/workspace/LogFileArchiveScanner/xml/H_11C6A2C2C55A_20110727_101518.xml; lineNumber: 9903; columnNumber: 1; Ungültiges XML-Zeichen (Unicode: 0x0) wurde im Elementcontent des Dokuments gefunden.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at verschieben.Dateien.XML(Dateien.java:273)
at verschieben.Dateien.getNextZipFiles(Dateien.java:255)
at verschieben.Dateien.getZipFiles(Dateien.java:203)
at verschieben.Dateien.copyFolder(Dateien.java:85)
at verschieben.Dateien.copyFolder(Dateien.java:84)
at verschieben.Dateien.copyFolder(Dateien.java:84)
at verschieben.Dateien.<init>(Dateien.java:42)
at verschieben.Dateien.main(Dateien.java:300)
Und wie könnte ich einen Duplicate Entry ignorieren?
Ich poste euch die zwei Klassen die ich habe:
[Fatal Error] H_11C6A2C2C55A_20110727_101518.xml:9903:1: Ungültiges XML-Zeichen (Unicode: 0x0) wurde im Elementcontent des Dokuments gefunden.
org.xml.sax.SAXParseException; systemId: file:/C:/metin8y/eclipse/eclipse/workspace/LogFileArchiveScanner/xml/H_11C6A2C2C55A_20110727_101518.xml; lineNumber: 9903; columnNumber: 1; Ungültiges XML-Zeichen (Unicode: 0x0) wurde im Elementcontent des Dokuments gefunden.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at verschieben.Dateien.XML(Dateien.java:273)
at verschieben.Dateien.getNextZipFiles(Dateien.java:255)
at verschieben.Dateien.getZipFiles(Dateien.java:203)
at verschieben.Dateien.copyFolder(Dateien.java:85)
at verschieben.Dateien.copyFolder(Dateien.java:84)
at verschieben.Dateien.copyFolder(Dateien.java:84)
at verschieben.Dateien.<init>(Dateien.java:42)
at verschieben.Dateien.main(Dateien.java:300)
Und wie könnte ich einen Duplicate Entry ignorieren?
Ich poste euch die zwei Klassen die ich habe:
Java:
package verschieben;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
public class Dateien {
// Verzeichnisse angeben
File input = new File("X:\\2012");
File output = new File("C:\\metin8y\\monstar");
File temp = new File("C:\\metin8y\\temp");
Document dom;
Element eElement;
String wert1;
public Dateien() {
// Verzeichnis vorhanden???
if (!input.exists()) {
System.out.println("Direcotry does not exists.");
System.exit(0);
} else {
// Dateien kopieren
try {
copyFolder(input, output);
} catch (IOException e) {
e.printStackTrace();
System.exit(0);
}
}
System.out.println("Done");
}
public File getInput() {
return input;
}
public void setInput(File input) {
this.input = input;
}
public File getOutput() {
return output;
}
public void setOutput(File output) {
this.output = output;
}
// komplettes Verzeichnis (alle Ordner kopieren und verschieben) kopieren
@SuppressWarnings("deprecation")
public void copyFolder(File input, File output) throws IOException {
Datenbank db = new Datenbank();
if (input.isDirectory()) {
if (!output.exists()) {
output.mkdir();
System.out.println("Directory copied from " + input + " to " + " " + output);
}
String files[] = input.list();
for (String file : files) {
File input2 = new File(input, file);
File output2 = new File(output, file);
// rekursiv kopieren
copyFolder(input2, output2);
getZipFiles(output2);
}
}
else {
InputStream in = new FileInputStream(input);
OutputStream out = new FileOutputStream(output);
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
in.close();
out.close();
// Die Archive-Elemente Zippen und mit subString die Namen erhalten
ZipFile zipF = null;
try {
zipF = new ZipFile(output);
Enumeration<? extends ZipEntry> enu = zipF.entries();
while (enu.hasMoreElements()) {
ZipEntry zipE = (ZipEntry) enu.nextElement();
// Datum, Name und Uhrzeit von Einzelnen Dateien
String a = zipE.getName().substring(15, 23);
String b = zipE.getName().substring(24, 30);
String c = input.getName().substring(0, 5);
// Verzeichnis-Datum
String jahr = output.getName().substring(14, 18);
String monat = output.getName().substring(18, 20);
String tag = output.getName().substring(20, 22);
// Differenz von Daten
DateTime start = new DateTime(Integer.parseInt(jahr), Integer.parseInt(monat), Integer.parseInt(tag), 0, 0, 0, 0);
DateTime end = new DateTime();
Days days = Days.daysBetween(start, end);
int difference = days.getDays();
System.out.println("Differenz: " + difference);
// Variable für die Anzahl der Tage, wie Lange die Dateien
// in einem Archiv bleiben sollen.
int x = 30;
// Nach 30 Tagen die Dateien in einen anderen Ordner
// verschieben
File output3 = new File("Logs");
if (difference > x) {
output.renameTo(new File(output3, output.getName()));
}
// Überprüfen XD- oder DAS-File
String d = "INDIA";
wert1=zipE.getName();
System.out.println(wert1+" :Wert1");
if (c.equals(d)) {
db.insert(input.getPath(), output.getPath(), "XD");
db.insert1(zipE.getName(), a, b,"");
} else {
db.insert(input.getPath(), output.getPath(), "DAS");
db.insert1(zipE.getName(), a, b,"");
}
System.out.println("File copied from: " + input + " to: " + output);
}
} catch (IOException ex) {
System.out.println("Done");
} finally {
if (zipF != null) {
zipF.close();
}
}
}
}
// Methode zum Entpacken von 5-Minuten-Zips.
@SuppressWarnings("resource")
public void getZipFiles(File ext) {
try {
String tmpFolder = "tmp";
File tmpfolder = new File(tmpFolder);
if (!tmpfolder.exists()) {
tmpfolder.mkdirs();
}
byte[] buf = new byte[1024];
ZipInputStream zipIn = new ZipInputStream(new FileInputStream(ext));
ZipEntry zipentry = zipIn.getNextEntry();
while (zipentry != null) {
String entryName = zipentry.getName();
int n;
FileOutputStream fileoutputstream;
File newFile = new File(entryName);
String directory = newFile.getParent();
System.out.println("Name of 5-Minute-Zips: " + newFile.getName());
if (directory == null) {
if (newFile.isDirectory())
break;
}
fileoutputstream = new FileOutputStream(tmpFolder + "/" + entryName);
while ((n = zipIn.read(buf, 0, 1024)) > -1)
fileoutputstream.write(buf, 0, n);
fileoutputstream.close();
zipIn.closeEntry();
zipentry = zipIn.getNextEntry();
}
zipIn.close();
String files[] = tmpfolder.list();
for (String file : files) {
File input2 = new File(tmpfolder, file);
getNextZipFiles(input2);
input2.delete();
}
} catch (Exception e) {
e.printStackTrace();
}
}
// Methode zum Entpacken der einfachen Zips (XML-Datein erhalten)
@SuppressWarnings("resource")
public void getNextZipFiles(File ext) {
try {
String neu = "xml";
File tmpfolder = new File(neu);
if (!tmpfolder.exists()) {
tmpfolder.mkdirs();
}
byte[] buf = new byte[1024];
ZipInputStream zipIn = null;
ZipEntry zipentry;
zipIn = new ZipInputStream(new FileInputStream(ext));
zipentry = zipIn.getNextEntry();
while (zipentry != null) {
String entryName = zipentry.getName();
System.out.println("Name of the XML-Data: " + entryName);
int n;
FileOutputStream fileoutputstream;
File newFile = new File(entryName);
String directory = newFile.getParent();
if (directory == null) {
if (newFile.isDirectory())
break;
}
fileoutputstream = new FileOutputStream(neu + "/" + entryName);
while ((n = zipIn.read(buf, 0, 1024)) > -1)
fileoutputstream.write(buf, 0, n);
fileoutputstream.close();
zipIn.closeEntry();
zipentry = zipIn.getNextEntry();
zipIn.close();
String files[] = tmpfolder.list();
for (String file : files) {
File input2 = new File(tmpfolder, file);
XML(input2);
input2.delete();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void XML(File input) {
try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(input);
doc.getDocumentElement().normalize();
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("Fin");
System.out.println("-----------------------");
String fin = "";
if (nList.item(1).getTextContent().equals(""))
fin = nList.item(0).getTextContent();
else
fin = nList.item(1).getTextContent();
for (int i = 0; i < nList.getLength(); i++) {
Node nNode = nList.item(i);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
System.out.println("FIN:" +nNode.getTextContent());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
Dateien d = new Dateien();
Datenbank db = new Datenbank();
System.out.println(d + "" + db + "");
}
}
// Xpath: <VINFromCom>WEB62808713123497</VINFromCom>
Java:
package verschieben;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.w3c.dom.NodeList;
public class Datenbank {
private Connection con = null;
public Datenbank() {
// DB-Informationen
String dbuser = "las";
String dbpasswd = "71NAfI";
String DbUrl = "jdbc:mysql://cmtcd014440:3306/las";
try {
// JDBC-Treiber laden
DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
// DB-Verbindungsaufbau
Class.forName("org.gjt.mm.mysql.Driver");
// String connectionUrl="jdbc:mysql://" + dbserver+ ":3306;" +
// "databaseName=" + dbname + ";user=" + dbuser + ";passwd=" +
// dbpasswd;
con = DriverManager.getConnection(DbUrl, dbuser, dbpasswd);
} catch (Exception e) {
e.printStackTrace();
}
}
// Werte in Datenbank eintragen
public boolean insert(String input, String output, String merkmal) {
PreparedStatement ps = null;
try {
ps = con.prepareStatement("Insert Into Pfad Values (?,?,?)");
ps.setString(1, input);
ps.setString(2, output);
ps.setString(3, merkmal);
// ps.setString(4, nList);
ps.executeUpdate();
ps.close();
return true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return false;
}
public void insert1(String name, String datum, String uhrzeit,String VIN) {
PreparedStatement ps1 = null;
try {
ps1 = con.prepareStatement("Insert Into File Values(?,?,?,?)");
ps1.setString(1, name);
ps1.setString(2, datum);
ps1.setString(3, uhrzeit);
ps1.setString(4, VIN);
ps1.executeUpdate();
ps1.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (ps1 != null) {
try {
ps1.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/* public void update(String VIN, String input) {
PreparedStatement ps2 = null;
try {
String query ="Update file set VIN= ? where filename=?";
ps2=con.prepareStatement(query);
ps2.setString(3, VIN);
ps2.setString(1, input);
ps2.executeUpdate();
ps2.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (ps2 != null) {
try {
ps2.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}*/
}
Zuletzt bearbeitet: