renameTo scheitert an Unterordnern

chuxXo

Bekanntes Mitglied
Hallo Liebes Forum,

ich hab mal wieder ein ziemlich dummes Problem und finde nix was mir weiterhelfen kann.

Ich durchsuche ein Verzeichnis rekursiv und split meinen Text dann so, dass mein Ordnername (Artikelnummer) übrig bleibt. Dann geh ich durch eine Exceltabelle und such die passende Benennung zu der Artikelnummer. Danach wird versucht, den Ordner mit .renameTo umzubenennen.

Mein Code ist folgendermaßen:
Java:
	public void rename(String oldName, String newName){
		
		if(new File(oldName).exists()) System.out.println("Zu umbenennendes File existiert");
		if(new File(newName).exists()) System.out.println("File ("+newName+") existiert");
		else{
		    if (! new File(oldName).renameTo(new File(newName))) {
		    	System.out.println("Umbenennen fehlgeschlagen: "+oldName+" zu "+newName);
		    }
		}
		System.out.println();
	}

Leider benennt er mir alle Ordner um, die "keinen" Unterordner besitzen. Woran liegt das ???
Ein Ausschnitt aus meiner Konsole:

Neuer Name: D:\Doku\Eingabe\2097525\00006_2206844\Aufnahme_adapter_2206849
Alter Name: D:\Doku\Eingabe\2097525\00006_2206844\00001_2206849
Zu umbenennendes File existiert

Neuer Name: D:\Doku\Eingabe\2097525\00006_2206844\Druckstueck_compression_piece_2206845
Alter Name: D:\Doku\Eingabe\2097525\00006_2206844\00002_2206845
Zu umbenennendes File existiert

Neuer Name: D:\Doku\Eingabe\2097525\00006_2206844\Deckel_cap_2206850
Alter Name: D:\Doku\Eingabe\2097525\00006_2206844\00003_2206850
Zu umbenennendes File existiert

Neuer Name: D:\Doku\Eingabe\2097525\00006_2206844\Druckbolzen_bolt_2206851
Alter Name: D:\Doku\Eingabe\2097525\00006_2206844\00004_2206851
Zu umbenennendes File existiert

Neuer Name: D:\Doku\Eingabe\2097525\BG_Gegenm.15N_St.220_countermeasure_15N_st.220_2206844
Alter Name: D:\Doku\Eingabe\2097525\00006_2206844
Zu umbenennendes File existiert
Umbenennen fehlgeschlagen: D:\Doku\Eingabe\2097525\00006_2206844 zu D:\Doku\Eingabe\2097525\BG_Gegenm.15N_St.220_countermeasure_15N_st.220_2206844

Neuer Name: D:\Doku\Eingabe\BG_220_Montage_Sensoreinheit_2097525
Alter Name: D:\Doku\Eingabe\2097525
Zu umbenennendes File existiert
Umbenennen fehlgeschlagen: D:\Doku\Eingabe\2097525 zu D:\Doku\Eingabe\BG_220_Montage_Sensoreinheit_2097525


Hoffe ihr könnt mir helfen :)

mfg, chuxXo
 
Zuletzt bearbeitet:

Joose

Top Contributor
Leider benennt er mir alle Ordner um, die "keinen" Unterordner besitzen. Woran liegt das ???

An deinem Code! Dein Code soll Ordner XYZ umbennen, aber du wunderst dich das Ordner umbenannt werden?
Versuche das Problem genauer zu beschreiben, dein Konsolenoutput ist zwar schön aber hilft nicht bei erkennung des Problems. Für mich scheint der Code so zu funktionieren wie du es geschrieben hast!
 

chuxXo

Bekanntes Mitglied
Versuche das Problem genauer zu beschreiben, dein Konsolenoutput ist zwar schön aber hilft nicht bei erkennung des Problems. Für mich scheint der Code so zu funktionieren wie du es geschrieben hast!

Also ich find meinen Konsolenoutput äußerst hilfreich ! ;)
Wenn du dir anschaust, wie die Verzeichnisse davor heißen und er zuletzt den übergeordneten umbenennt und daran scheitert.
Das einzigste was ich nicht verstehe, ist, warum er die Ordner nicht umbenennen kann, die ein Verzeichnis enthalten.
Alle anderen Ordner macht er sauber.

Kann es sein, dass er den übergeordneten nicht umbenennen kann, da er noch auf die unteren zugreift ?
Kann man diesen Speicher eventuell wieder freigeben ?

EDIT: Wenn das Programm noch läuft, kann man die bereits umbenannten Ordner umbenennen. Bei denen wo es fehlschlug, wird der Zugriff verweigert, da das Programm wohl noch darauf zugreift.
 
Zuletzt bearbeitet:

Joose

Top Contributor
Leider benennt er mir alle Ordner um, die "keinen" Unterordner besitzen. Woran liegt das ???
Ein Ausschnitt aus meiner Konsole:
Wenn du dir anschaust, wie die Verzeichnisse davor heißen und er zuletzt den übergeordneten umbenennt und daran scheitert.
Das einzigste was ich nicht verstehe, ist, warum er die Ordner nicht umbenennen kann, die ein Verzeichnis enthalten.
Alle anderen Ordner macht er sauber.

Hier lag das Verständnisproblem: Im 1.Post meinst du "leider benennt er alle Ordner um". Das er aber die Ordner mit Inhalt nicht umbenennt, wird nicht direkt erwähnt ;)
 

Harry Kane

Top Contributor
Java hat noch seinen Finger drauf ;)
Woher weisst du das? Hast du einen FileLock auf dem File oder Verzeichnis gesetzt? Siehst du eine Fehlermeldung im Explorer/Dateimanager? Wenn ja, wie lautet sie genau?
Und wieso kommst du auf die Idee, Java könnte das Verzeichnis umbenennen, wenn es von Hand (aus welchem Grund auch immer) NICHT geht?
 
Zuletzt bearbeitet:

chuxXo

Bekanntes Mitglied
Das weiß ich daher, denn wenn das Programm gestartet ist und ich nach dem rekursiven durchsuchen versuch das Verzeichnis umzubenennen und es nicht klappt, aber dann klappt wenn das Programm beendet wurde.

Ich hab eine Lösung gefunden. Lag wohl am FileSearcher !
 

Harry Kane

Top Contributor
Das weiß ich daher, denn wenn das Programm gestartet ist und ich nach dem rekursiven durchsuchen versuch das Verzeichnis umzubenennen und es nicht klappt, aber dann klappt wenn das Programm beendet wurde.
Klappt/klappt nicht sind keine Fehlermeldungen!

Ich hab eine Lösung gefunden. Lag wohl am FileSearcher !
... von dem bisher nie die Rede war, der keine Java-Standardklasse ist und über dessen Verwendung du kein Wort schreibst. [Ironie/]Ich denke, daß von deiner ausführlichen Beschreibung Leute mit ähnlichen Problemen sicherlich profitieren können. [\Ironie]
 

chuxXo

Bekanntes Mitglied
Klappt/klappt nicht sind keine Fehlermeldungen!

Ich kann mir auch gerne Fehlermeldungen ausdenken, wenn du das möchtest ;)

... von dem bisher nie die Rede war, der keine Java-Standardklasse ist und über dessen Verwendung du kein Wort schreibst

Ich habe beschrieben, dass ich mein Verzeichnis rekursiv durchsuche und danach die gefundenen Dateien umbenenn ;) Ich bin auch nicht davon ausgegangen, dass dieser der Ursprung allen Übels ist. Deine Antworten haben mir ebenfalls nicht weitergeholfen außer, dass du etwas anprangerst und eine sehr gute Ironie an Tag legst :)
 

chuxXo

Bekanntes Mitglied
Für die, die es noch interessiert, wie ich vorgehe :

Java:
public File searchDirectory(File file){
		
	File[] subDirectories = getAllDirectoriesFromFile(file.listFiles());	
	if(subDirectories != null && subDirectories.length > 0){
	      for(File subDirectory : subDirectories){
			searchDirectory(subDirectory);
			renamefolder.controlRenameFolder(subDirectory.getAbsolutePath());
	      }
	}		
	return file;
}

private File[] getAllDirectoriesFromFile(File[] files){

	List<File> directoryList = new ArrayList<File>();	
	if(files != null && files.length > 0){
	      for(File file : files){
		      if(file.isDirectory()){
			      directoryList.add(file);
		      }
	      }
	}
	return directoryList.toArray(new File[directoryList.size()]);
}

bei dem Punkt "renamefolder.controlRenameFolder" gehe ich in meine erstellte Methode, zum abgleichen des Namens im ExcelFile und anschließend wird dieser Ordner umbenannt.

Der Methode SearchDirectory wird ein ein Dateipfad übergeben, welcher durchsucht wird.
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
Ich kann mir auch gerne Fehlermeldungen ausdenken, wenn du das möchtest ;)
Du könntest auch einfach die Fehlermeldung nennen. Ich habe gerade ein 10 MB Datei in ein Verzeichnis geschrieben und während des Schreibvorgangs versucht, das Verzeichnis zu löschen. Ergebnis: Der zum Löschen verwendete FreeCommander unter Win 7 sagt mit, daß das Verzeichnis zur Zeit von Java verwendet wird. Oder hat dir dein OS tatsächlich gesagt "Klappt nicht"?
Und zu deiner Lösung: Ist das der Ansatz der funktioniert? Es wäre noch interessant bzw. lehrreich, den Ansatz zu sehen, der nicht funktioniert hat. Das ist mir weiterhin unklar. Du legst offenbar eine Menge File-Objekte an. Ich hätte nicht gedacht, daß das dazu führen könnte, daß Verzeichnisse nicht gelöscht werden können, sondern daß wenn Verzeichnisse gelöscht werden, für die du ein File-Objekt angelegt hast, es bei der Verwendung des File-Objektes zu einer Exception kommt.
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben