Dateien kopieren, entpacken, XML auslesen!

big_killa

Mitglied
Hallo,

ich bräuchte Hilfe beim kopieren von einem Verzeichnis in mehrere Verzeichnisse, d.h. ich will von einem Server die Dateien auf einen Temp Ordner und in einen anderen Ordner kopieren. Außerdem möchte ich die Dateien die ich in Temp kopiere, temporär entpacken und eine Spalte von den XML Dateien auslesen.

Würde mich freuen wenn Ihr mir helfen könnt.

Ich bendanke mich im vorraus.

Mfg

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 org.joda.time.DateTime;
import org.joda.time.Days;

public class Dateien {
	// Verzeichnisse angeben
	File input = new File("X:\\2012");
	File output = new File("C:\\metin8y\\monstar");
	

	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 static 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);
			}
		}
		
		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(input);
				Enumeration<? extends ZipEntry> enu = zipF.entries();
				while (enu.hasMoreElements()) {
					ZipEntry zipE = (ZipEntry) enu.nextElement();
					System.out.println("Dateiname    " + zipE.getName());
					// 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;

					//File output3 = new File("C:\\metin8y\\Logs");
					// Nach 30 Tagen die Dateien verschieben
					if (difference > x) {
						output.renameTo(new File("C:\\metin8y\\Logs", output.getName()));
					} else {
					}

					// Überprüfen ob XD- oder DAS-File
					String d = "INDIA";
					if (c.equals(d)) {
						db.insert(input.getPath(), output.getPath(), "XD", zipE.getName(), a, b,"");
					} else {
						db.insert(input.getPath(), output.getPath(), "DAS", 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();
				}
			}
		}
	}

	public static void main(String[] args) throws IOException {
		Dateien d = new Dateien();
		Datenbank db = new Datenbank();
		System.out.println(d + "" + db);

	}
}

so sieht mein Code bisher aus!!!
 
Und das/die Probleme ist/sind?

Ein Fehler ist z.B:
[JAVA=83]while ((length = in.read(buffer)) > 0) {[/code]
Dazu ein Blick in die Doku:
public int read()
throws IOException

Reads a byte of data from this input stream. This method blocks if no input is yet available.

Specified by:
read in class InputStream
Returns:
the next byte of data, or -1 if the end of the file is reached.
Throws:
IOException - if an I/O error occurs.
read liefert -1 wenn das Ende des Streams erreicht ist, nicht irgendeinen Wert >0

[OT]Irgendwie stellt mein Firefox (16.0.1) die Zeilennummern im Code Block versetzt dar. Weiß jemand woran das liegt?[/OT]
 
Danke Michael, das habe ich von einem Beispiel aus programmiert, so wie ich das programm gepostet habe funktioniert alles, das Problem ist grad, dass ich die dateien vom output in temp kopieren möchte. Das bekomme ich nicht auf die reihe!!!
 
Sorry, mein vorheriger Post ist Schmarrn.

Wo wird da was in temp kopiert? Was funktioniert nicht? Fehlermeldungen oder fehlerhaftes Verhalten?
 
😀

das Problem liegt darin, dass ich die Daten von einem Server zuerst in einen Ordner kopiere, dass klappt auch soweit, nun soll ich die einzelnen Zips entpacken, noch ein problem ist, dass ich zuerst ein Sammelzip habe, dazu muss ich erst einmal das entpacken und dann die einzelnen Zips. Wenn du mir jetzt helfen könntest, wäre es super!!!
 
so ganz durchblicke ich den Code noch nicht.
Ich würde das ganze in mehr Methoden strukturieren, die einzelne Aufgaben abarbeiten. input nach output kopieren, zipfile auslesen, zipeinträge extrahieren...

Warum kopierst Du erst das input File in output, um dann doch wieder input als ZipFile auszulesen?#
Hab noch keine Stelle gefunden in der Du das zip File entpackst.
Warum soll dennin der "Zip" Schleife das outpufFile "dauernd" umbenannt werden?
...
 
Also ich habe eine begrenzte Kapazität an Speicher daher will ich es vom server auf eine andere Festplatte zuerst kopieren. Das entpacken bekomme ich leider nicht hin, zwar kann ich temporär entpacken aber mehr nicht.

Was meinst du mit umbenennen??? Ich nenne hier nichts um, wenn du das mit dem "rename" meinst, dass tut meine Dateien verschieben nicht umbenennen.
 
Was ich meinte ist: Du iterierst über die zip Entries, vergleichst und arbeitest aber immer mit output. Oder habe ich da was übersehen und output wird innerhalb der Schleife eine neue Referenz zugewiesen?
 

Zurück
Oben