# Java Ordner kopieren [Error]



## Ikaron (1. Nov 2011)

Okey, Ich versuche einen Ordner zu kopieren. Bisher hab ich folgenden Code:

```
public void copyDirectory(File sourceLocation, File targetLocation) {

		if (sourceLocation.isDirectory()) {

			if (!targetLocation.exists()) {
				targetLocation.mkdir();
			}

			String[] children = sourceLocation.list();
			for (int i = 0; i < children.length; i++) {
				copyDirectory(new File(sourceLocation, children[i]), new File(
						targetLocation, children[i]));
			}
		} else {

			try {

				if (!targetLocation.getParentFile().exists()) {

					createDirectory(targetLocation.getAbsolutePath());
					targetLocation.createNewFile();

				} else if (!targetLocation.exists()) {

					targetLocation.createNewFile();
				}

				InputStream in = new FileInputStream(sourceLocation);
				OutputStream out = new FileOutputStream(targetLocation);

				byte[] buf = new byte[1024];
				int len;
				while ((len = in.read(buf)) > 0) {
					out.write(buf, 0, len);
				}
				in.close();
				out.close();

			} catch (Exception e) {

				if (e.getMessage().contains("Zugriff")
						|| e.getMessage().contains("Access"))
					new MessageBox("Error: " + e.getMessage(), "Access denied");
				else
					new MessageBox("Error: " + e.getMessage(), e.getMessage());
			}
		}
	}

	public void createDirectory(String s) {

		if (!new File(s).getParentFile().exists()) {

			createDirectory(new File(s).getParent());
		}

		new File(s).mkdir();
	}
```

Ich muss gestehen, dass ein großer Teil dieses Codes aus dem Internet ist. Nunja, es funktioniert ganz gut, nur leider steht "Zugriff verweigert" immer bei der ersten Datei im Ordner. Der Rest geht einwandfrei. Kann mir jemand von euch helfen? Vielen Dank im Voraus,
Ikaron


----------



## Ikron (1. Nov 2011)

Achja, außerdem wird ein neuer Ordner mit dem Namen der ersten Datei erstellt, also z.B. server.properties als Verzeichnis anstatt als Datei, und mit einer Fehlernachricht.


----------



## winSharp93 (1. Nov 2011)

Hallo Ikaron,



> nur leider steht "Zugriff verweigert" immer bei der ersten Datei im Ordner


Um welche Datei handelt es sich da jeweils?
Existiert diese tatsächlich?

Evtl. fehlen dir einfach wirklich die Zugriffsrechte, da es sich bspw. um Systemdateien handelt.
In diesem Falle kannsr du die Attribute wie in Managing Metadata (File and File Store Attributes) gezeigt ermitteln und dann einfach alle Systemdateien auslassen.


----------



## winSharp93 (1. Nov 2011)

Ich glaube, ich habe das Problem gefunden:
In Zeile 20 steht:
[JAVA=20]createDirectory(targetLocation.getAbsolutePath());[/code]
Damit erzeugst du einen Ordner, der den Namen der Datei hat.

Ich glaube, das sollte heißen:
[JAVA=20]createDirectory(targetLocation.getParentFile().getAbsolutePath());[/code]

Wobei du sowieso nochmal ein wenig überarbeiten solltest, wann du welche Dateien und Verzeichnisse anlegst - so ist das noch ein wenig unübersichtlich.


----------



## Ikaron (1. Nov 2011)

Ja, ich weiß, dass es unübersichtlich ist xD
Nunja, ich werd das mal versuchen, ist aber komisch, denn bei allen anderen Datein geht es ja, nur nicht bei der ersten. Und wenn ich die Erste lösche aus dem Ordner, den ich kopieren will, schmeißt es den Fehler bei der zweiten. Und das sind alles keine Systemdateien.


----------



## Ikaron (1. Nov 2011)

Ohh... Stimmt... Deshalb entsteht auch der Ordner mit dem Dateinamen, wegen mkdir()... Gut, ich versuch es mal.


----------



## Ikaron (1. Nov 2011)

OMG, Es geht jetzt!!
Vielen Dank :3
Wäre ich angemeldet, würde ich dir jetzt nen Thanks geben ;D


----------

