Duplicate Entry Ignorieren?

big_killa

Mitglied
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:

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:
S

SlaterB

Gast
> Und wie könnte ich einen Duplicate Entry ignorieren?

ist eine separate Frage, hat nichts mit der Fehlermeldung zu tun?
immerhin Thementitel, etwas merkwürdiges Vorgehen, und was gemeint ist sehe ich überhaupt nicht

----

zum StackTrace-Fehler, kann man in Suchmaschinen eintippen, siehe z.B.
Error about invalid XML characters on Java - Stack Overflow
mit vielen sinnvollen Aussagen
ganz unten Links allerdings gehen nicht,

in deinem Programm kannst du mit
> dBuilder.parse(input)
anscheinend wenig zum Encoding der Datei angeben,
ist ja sicher auch für sich kein leichtes Thema, ansonsten separat zu suchen,
einen Link habe ich grade, aber Wege gibt es viele
Parsing XML from a String

wenn du eine genügend kleine XML-Datei ungefährlichen Inhalts hast, bei der der parse-Fehler auftritt,
dann könntest du sie hier als Anhang hochlagen und ich/ andere vielleicht nachschauen, ob reproduzierbar,
ob anderer Code geht
 

big_killa

Mitglied
Danke Slater für deine Antwort. Ich beschreib dir kurz was ich vorhabe.Also ich habe zwei Tabellen. In der einen Tabelle sind zwei Primary Keys vorhanden und ich will beim kopieren der Daten in die Tabellen schreiben von Wo? (also das Quellverzeichnis) wohin? (Zielverzeichnis) reinschreiben. Da aber dies öfters mal vorkommt, und dabei auch ein Fehler ständig im eclipse erscheint, will ich dies umgehen. Nur ich weiss nicht wie das gehen soll.
Das hat nichts mit der Fehlermeldung zu tun.

Nun zur Fehlermeldung: Ich brauch von einigen XML Dateien eine bestimmte Spalte die ist aber nicht in jeder XML Datei drinnen. Nur wenn sie vorhanden ist, soll sie in DB eingetragen werden ansonsten einfach fortsetzen, das war meine Frage, wie ich das auch umgehen kann dass da die Fehlermeldung nicht erscheint!!!

Würde mich freuen wenn du mir ein Vorschlag hättest.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U duplicate entry: Version.java.template Java Basics - Anfänger-Themen 0
K OOP duplicate class, öffentliche Klasse in unterschiedlichen Java Dateien speichern? Java Basics - Anfänger-Themen 3
W Compiler-Fehler variable cannot be resolved / duplicate local variable Java Basics - Anfänger-Themen 11
T Interface Map und Map.Entry Java Basics - Anfänger-Themen 4
B HashMap Fehler - Set/Interator/Map.Entry Java Basics - Anfänger-Themen 7
O for(String entry : entries) ? Java Basics - Anfänger-Themen 2
S Entry Java Basics - Anfänger-Themen 15
S Entry.Map Java Basics - Anfänger-Themen 4
G Properties und eine Liste in einem entry key. Java Basics - Anfänger-Themen 2
Z ArrayList<Entry<Datentyp, Integer>> ? Java Basics - Anfänger-Themen 12
G ArrayList<Map.Entry.> nach den Values sortieren? Java Basics - Anfänger-Themen 8
K Generics bei Map.Entry Java Basics - Anfänger-Themen 8
D String Groß/Kleinschreibung Ignorieren Java Basics - Anfänger-Themen 4
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
I No Jakarta Enterprise Beans found with interface ignorieren? Java Basics - Anfänger-Themen 2
S Scanner soll Groß-/ Kleinschreibung ignorieren Java Basics - Anfänger-Themen 2
B Regex ignorieren von Groß - Kleinschreibung Java Basics - Anfänger-Themen 1
CptK Datentypen String splitten, ä,ö,ü, etc ignorieren Java Basics - Anfänger-Themen 1
B String: Groß- und Kleinschreibung ignorieren bei Contains? Java Basics - Anfänger-Themen 2
T split innerhalb Klammern ignorieren? Java Basics - Anfänger-Themen 6
V Schlüsselworte Befehl Ignorieren? Java Basics - Anfänger-Themen 10
M String vergleichen - Leerzeichen Ignorieren? Java Basics - Anfänger-Themen 4
B .ut dateien ignorieren und fortsetzen Java Basics - Anfänger-Themen 9
B DTD. umgehen/ignorieren Java Basics - Anfänger-Themen 3
C Methoden Rückgabewert von statischer Methode ignorieren Java Basics - Anfänger-Themen 8
J Regex um Inhalte zwischen Tags zu ignorieren Java Basics - Anfänger-Themen 2
I Wie Tastatureingaben ignorieren? Java Basics - Anfänger-Themen 7
S Array sortieren NULL oder Empty ignorieren. Java Basics - Anfänger-Themen 9
Developer_X Geerbte Methoden ignorieren Java Basics - Anfänger-Themen 5
M Scanner String Eingaben ignorieren Java Basics - Anfänger-Themen 4
D Datei einlesen, zeilen ignorieren, probleeem Java Basics - Anfänger-Themen 7
M Strings: Groß-Kleinschreibung ignorieren Java Basics - Anfänger-Themen 6
S Benutzereingabe - Gross und Kleinschreibung ignorieren Java Basics - Anfänger-Themen 7
M Event auslösen (unsinnig gestellt - ignorieren) Java Basics - Anfänger-Themen 4
S In einer CSV Datei leere Zeilen ignorieren Java Basics - Anfänger-Themen 6
M Warnungen in Eclipse übergehen oder ignorieren Java Basics - Anfänger-Themen 4
R Alles ignorieren ausser Zahlen Java Basics - Anfänger-Themen 21

Ähnliche Java Themen


Oben