# Java Dateien verschieben



## MMR (19. Okt 2012)

Hallo, ich versuche Dateien von einem Ort zum nächsten zu verschieben, was mir nicht wirklich gelingt und ich kann leider nicht herausfinden woran es hapert.

Hier mein Code


```
import java.io.*;
import java.util.*;
import java.nio.file.*;
class ImportTreepad
{
  public static void main ( String[] args )
  {
	ImportTreepad n = new ImportTreepad();
	File dir = new File("//Pfad ist korrekt");//Höchster Pfad wird aufgerufen
	n.listDir(dir);
  }

public String dateiformat(String datei){
	datei=datei.replaceAll(" ", ""); //String wird in ein Format geändert, dass Foswiki erkennen kann
	datei=datei.toLowerCase();
	datei=datei.replace("ä","ae");
	datei=datei.replace("ö","oe");
	datei=datei.replace("ü","ue");
	datei=datei.substring(0,datei.lastIndexOf(46));
	return(datei);
}  

public void leseschreibedatei(File dir, String datei){
	boolean bildjpg=false;
	boolean bildgif=false;
	String file="";
	datei=dateiformat(datei);
	System.out.println(datei);
    try { 
		Scanner scanner = new Scanner(dir);
		File ausgabedatei = new File("C:\\xampp\\htdocs\\wiki\\data\\TreePad\\"+datei+".txt");
		BufferedWriter bw = new BufferedWriter(new FileWriter(ausgabedatei)); 
		while ( scanner.hasNextLine() ){// jede Zeile wird einzelnd eingelesen
			String line=scanner.nextLine();
			if(line.contains(".jpg")){
				int indexo=line.indexOf("<IMG SRC=");
				String lineo=line.substring(0, indexo);
				int indext=line.indexOf("/>");
				String linet=line.substring(indext+2, line.length());
				int indexjpg=line.indexOf(".jpg"); // der Name der Datei wird gefiltert
				file=line.substring(indexo+10, indexjpg);
				line=lineo+"%ATTACHURL%/"+file+".jpg"+linet; //die Zeile wird mit dem richtigen link wieder zusammengesetzt
				bildjpg=true;
			}else if(line.contains(".gif")){
				int indexo=line.indexOf("<IMG SRC=");
				String lineo=line.substring(0, indexo);
				int indext=line.indexOf("/>");
				String linet=line.substring(indext+2, line.length());
				int indexjpg=line.indexOf(".jpg"); // der Name der Datei wird gefiltert
				file=line.substring(indexo+10, indexjpg);
				line=lineo+"%ATTACHURL%/"+file+".gif"+linet; //die Zeile wird mit dem richtigen link wieder zusammengesetzt
				bildgif=true;
			}
			bw.write(line);
			bw.newLine();
		}
		bw.close();
		scanner.close();
		
		if(bildjpg==true){
			
				File f = new File("C:/xampp/htdocs/wiki/pub/TreePad/"+datei); 
					f.mkdir();
					
				File quellDatei = new File(dir.getParent()+"/"+file+".jpg");
				File zielDatei = new File("C:/xampp/htdocs/wiki/pub/TreePad/"+datei+"/");
				quellDatei.renameTo(zielDatei);
				
				System.out.println(dir.getParent()+"/"+file+".jpg");

		}
		if(bildgif==true){
							
				File f = new File("C:/xampp/htdocs/wiki/pub/TreePad/"+datei); 
					f.mkdir();
					
				File quellDatei = new File(dir.getParent()+"/"+file+".jpg");
				File zielDatei = new File("C:/xampp/htdocs/wiki/pub/TreePad/"+datei+"/");
				quellDatei.renameTo(zielDatei);


		}
    }catch (IOException ioe) { 
		System.out.println("Habe gefangen: "+ioe);
    }
}


public void kopierebild(String absoluterpfad, String dateiname){
	dateiformat(dateiname);
    try { 
		Path copySourcePath = Paths.get(absoluterpfad);
		Path copyTargetPath = Paths.get("C:\\xampp\\htdocs\\wiki\\pub\\TreePad\\"+dateiname+"\\");
		
	String dirName = "C:\\xampp\\htdocs\\wiki\\pub\\TreePad\\"+dateiname+"\\"; 
	File f = new File(dirName); 
	if (!(f.isDirectory())) { 
		f.mkdir();
 	}
		Files.copy( copySourcePath, copyTargetPath);
    }catch (IOException ioe) { 
		System.out.println("Habe gefangen: "+ioe);
    } 
}



public void listDir(File dir) {

	File[] files = dir.listFiles();
	if (files != null) {
		for (int i = 0; i < files.length; i++) {
			//System.out.print(files[i].getAbsolutePath());
			if (files[i].isDirectory()) {
				//System.out.print(" (Ordner)\n");
				listDir(files[i]); // ruft sich selbst mit dem 
					// Unterverzeichnis als Parameter auf
				}
				 else if(files[i].getAbsolutePath().endsWith( ".jpg") || files[i].getAbsolutePath().endsWith(".gif")) {
					//System.out.print(" (BildDatei)\n");
					//kopierebild(files[i].getAbsolutePath(), files[i].getName());
				}else if(files[i].getAbsolutePath().endsWith(".html")){
					//System.out.print(" (HTMLDatei)\n");
					if(files[i].getName() != "index.html"){
						leseschreibedatei(files[i], files[i].getName());
					}
					//System.out.println(files[i].getName());
					//System.out.println("Das hier gibt files[i] "+files[i]+" aus Und das hier gibt files[i].getName() "+files[i].getName()+" aus");
				}
		}
	}
}

}
```

Es geht mir also explizit um diesen Teil


```
File quellDatei = new File(dir.getParent()+"/"+file+".jpg");
				File zielDatei = new File("C:/xampp/htdocs/wiki/pub/TreePad/"+datei+"/");
				quellDatei.renameTo(zielDatei);
```


----------



## MMR (19. Okt 2012)

Tut mir leid, seit 3 stunden sitze ich an diesem problem und grad fiels mir auf:

Bei der zieldatei muss auch der Dateiname angegeben werden

also so :


```
File quellDatei = new File(dir.getParent()+"/"+file+".jpg");
                File zielDatei = new File("C:/xampp/htdocs/wiki/pub/TreePad/"+datei+"/"+file+".jpg");
                quellDatei.renameTo(zielDatei);
```


----------



## Ullenboom (22. Okt 2012)

Ein paar Tipps: Schau dir mal von Java 7 NIO2 an, insbeonsere Path, Paths und Files. Die Pfade würde ich eher zusammenbauen mit Methoden, weniger mit String-Operationen. So was wie:


```
String filename = file+".jpg";
Path quellDatei = Paths.get( dir.getParent() ).resove( filename );
Path zielDatei = Paths.get( "C:/xampp/htdocs/wiki/pub/TreePad" ).resolve( datei ).resolve( filename );
Files.move( quellDatei, zielDatei );
```

...+datei+"/"+file+" ... in deinem Bsp. klingt irgendwie nicht richtig, datei sollte wohl eher "dir" sein, oder?

Siehe auch Moving a File or Directory (The Java™ Tutorials > Essential Classes > Basic I/O) zu NIO2.


----------

