Dateien in Ordner einsortieren

Status
Nicht offen für weitere Antworten.

nuely

Mitglied
Ich schreibe ein Programm mit welchem ich neue MP3-Dateien in meine bestehende MP3-Sammlung einsortieren kann.
Das Programm wird in einem Ordner aufgerufen und soll alle MP3-Dateien darin wegsortieren.
Beispiel:
Das Programm wird aus dem Ordner \Musik\Sortieren aufrufen. Darin befinden sich:
Nelly - Test.mp3
Nelly feat. Justin Timberlake - Test.mp3
Nelly Furtado - Test.mp3
Nelly Fiktiv - Test.mp3

Mein Ziel ist nun, das die Dateien folgendermaßen sortiert werden:
\Musik\N\Nelly\Nelly - Test.mp3
\Musik\N\Nelly\Nelly feat. Justin Timberlake - Test.mp3
\Musik\N\Nelly Furtado\Nelly Furtado - Test.mp3
\Musik\N\Nelly Fiktiv\Nelly Fiktiv - Test.mp3

Wie man sieht hat jeder Interpret einen eigenen Ordner, aber nicht wenn er etwas mit einem anderem zusammen gemacht hat. Das kommt quasi in den Ordner des ersten Interpreten.

Das momentane Programm schafft es die ersten drei richtig zu sortieren, erstellt für den vierten aber keinen neuen Ordner sondern sortiert ihn unter Nelly mit ein.

Ich hoffe jemand kann mir bei der Weiterentwicklung des Algorithmus weiterhelfen.

Code:
package createOrdner;

import java.io.File;

public class CopyDateien {

	public static void main(String[] args)
	{
		File verzeichnis=new File(".");
		System.out.println(verzeichnis.getAbsolutePath());
		File[] dateien = verzeichnis.listFiles(); 
		if (dateien!=null)
		{
			for (int i=0; i<dateien.length; i++)
			{
				//System.out.println(dateien[i].getAbsolutePath());
				//Wenn Datei kein Ordner, aber eine Standard-MP3-Datei ist wird sie verschoben
				if(dateien[i].isFile()&&dateien[i].getName().endsWith("mp3")&&dateien[i].getName().contains(" - "))
				{
					//Interpreten extrahieren
					String dateiname=dateien[i].getName();
					String anfangsbuchstabe=dateiname.substring(0, 1);
					String interpret=dateiname.substring(0, dateiname.indexOf(" - "));
					//Prüfen ob bereits ein Ordner für diesen Interpreten existiert
					boolean ordnerVorhanden=false;
					String ordner=verzeichnis.getAbsolutePath().substring(0, verzeichnis.getAbsolutePath().lastIndexOf("\\"));
					ordner=ordner.substring(0, ordner.lastIndexOf("\\"));
					ordner=ordner+"\\"+anfangsbuchstabe;
					File unterverzeichnis=new File(ordner);
					File[] interpretenOrdner=unterverzeichnis.listFiles();
					if (interpretenOrdner!=null)
					{
						for (int j=0; j<interpretenOrdner.length; j++)
						{
							if(dateiname.contains(interpretenOrdner[j].getName()+" "))
							{
								ordnerVorhanden=true;
								ordner=interpretenOrdner[j].getAbsolutePath();
							}
						}
					}
					//Wenn bereits ein Ordner vorhanden ist, die Datei hier hinein kopieren
					if (ordnerVorhanden)
					{
						File quelle = new File(dateien[i].getAbsolutePath().replace(".\\", ""));
						File ziel = new File(ordner+"\\"+dateiname);
						if(quelle.renameTo(ziel))
						{
							System.out.println("Datei "+dateiname+" kopiert nach "+ordner);
						}
						else
						{
							System.out.println("Kopieren von "+ordner+"\\"+dateiname+" fehlgeschlagen");
						}
					}
					//Wenn kein Ordner vorhanden ist, Ordner erstellen und Datei anschließend hinein kopieren
					else
					{
						File neu=new File(ordner+"\\"+interpret);
						if(!neu.mkdir()&&!neu.exists())
						{
							System.out.println("Erstellen von "+ordner+"\\"+interpret+" fehlgeschlagen");
						}
						else
						{
							System.out.println("Ordner "+ordner+"\\"+interpret+" erstellt");
						}
						File quelle = new File(dateien[i].getAbsolutePath().replace(".\\", ""));
						File ziel = new File(ordner+"\\"+interpret+"\\"+dateiname);
						if(quelle.renameTo(ziel))
						{
							System.out.println("Datei "+dateiname+" kopiert nach "+ordner+"\\"+interpret);
						}
						else
						{
							System.out.println("Kopieren von "+ordner+"\\"+interpret+"\\"+dateiname+" fehlgeschlagen");
						}
					}
				}
			}
		}
	}

}
 

hdi

Top Contributor
Ich hab mir jetz deinen ganzen Code nich komplett angeschaut, aber ich finde es seltsam, dass das 3.Lied nen eigenen Ordner kriegt, das 4.Lied aber nicht...

Vllt vergisst du in der Schleife irgendwas zurückzusetzen, nachdem ein Ordner angelegt wurde, oder kA.

Hast du das schonmal versucht ohne dem 3.Lied? Hast du dann am Ende auch nur 1 Ordner "Nelly" und dort
ist auch das 4.Lied drinnen?
 

didjitalist

Bekanntes Mitglied
verzeichnisse werden in undefinierter reihenfolge abgearbeitet. d.h. es wird z.b. erst der ordner "Nelly Furtado" erzeugt, dann ein ordner "Nelly" und in zeile 35 stellst du fest, dass "Nelly " in "Nelly Fiktiv" vorkommt und schmeisst die letzte datei also in den "Nelly" ordner.
 

hdi

Top Contributor
Also erstmal solltest du zwischen Zeile 29 und 30 das hier einfügen:

Code:
unterverzeichnis.mkdir();

Das gilt auch für jeden Unterordner den du in diesem Prozess erstellst. du erstellst bisher nur den finalen
Ornder, was aber immer fehlschläft weil der Ober-Ordner dazu noch nicht mal angelegt wurde.
Du willst ja wohl nicht selber erstmal einen Ornder für das ganze Alphabet anlegen, oder? weil sonst
schläft das kopieren immer fehl.

So, mir haut er alle 4 Lieder in den Ornder "Nelly".Kann es sein dass du hier veralteten Code gepostet hast?
 

hdi

Top Contributor
ja hab deine antwort auch erst jetzt gelesen.

Is ja krass... ist das echt "undefiniert"? Wie soll man da überhaupt irgendwas mit Datei-Bearbeitung in Java
machen?
 

nuely

Mitglied
didjitalist hat gesagt.:
verzeichnisse werden in undefinierter reihenfolge abgearbeitet. d.h. es wird z.b. erst der ordner "Nelly Furtado" erzeugt, dann ein ordner "Nelly" und in zeile 35 stellst du fest, dass "Nelly " in "Nelly Fiktiv" vorkommt und schmeisst die letzte datei also in den "Nelly" ordner.

genau das ist das Problem. Und da weiß ich momentan nicht wie ich das lösen kann.

hdi hat gesagt.:
Also erstmal solltest du zwischen Zeile 29 und 30 das hier einfügen:

Code:
unterverzeichnis.mkdir();

Das gilt auch für jeden Unterordner den du in diesem Prozess erstellst. du erstellst bisher nur den finalen
Ornder, was aber immer fehlschläft weil der Ober-Ordner dazu noch nicht mal angelegt wurde.
Du willst ja wohl nicht selber erstmal einen Ornder für das ganze Alphabet anlegen, oder? weil sonst
schläft das kopieren immer fehl.

So, mir haut er alle 4 Lieder in den Ornder "Nelly".Kann es sein dass du hier veralteten Code gepostet hast?

Die 26 Ordner für Alphabet gibt es schon, denn wie gesagt geht es darum neue Dateien in die bestehende Struktur einzufügen.

Der Code ist aktuell. Vermutlich hat didjitalist recht.
 

didjitalist

Bekanntes Mitglied
hdi hat gesagt.:
Is ja krass... ist das echt "undefiniert"? Wie soll man da überhaupt irgendwas mit Datei-Bearbeitung in Java machen?
das ist nicht nur in java so. die reihenfolge ist natürlich nicht zufällig, die wird vom betriebssystem vorgegeben. das hat aber nix mit alphabetischer reihenfolge oder so zu tun. man muss sich halt selbst darum kümmern, in welcher reihenfolge abgearbeitet wird. es ist ja kein problem, ein verzeichnis einzulesen und die struktur erstmal zu sortieren. man darf sich nur niemals darauf verlassen, dass methoden wie File#listFiles() irgendeine ordnung einhalten
 

nuely

Mitglied
da ich keine Lösung über einen Algorithmus finden konnte habe ich jetzt eine Abfrage mit eingebaut.

Code:
if(dateiname.contains(interpretenOrdner[j].getName()+" "))
							{
								if (interpret.equals(interpretenOrdner[j].getName()))
								{
									ordnerVorhanden=true;
									ordner=interpretenOrdner[j].getAbsolutePath();
								}
								else
								{
									String message="Ist der Ordner "+
									interpretenOrdner[j].getName()+
									" korrekt für den Interpreten "+
									interpret;
									int antwort=JOptionPane.showConfirmDialog(null, message, "Korrekter Ordner", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
									switch (antwort)
									{
									case JOptionPane.YES_OPTION:
										ordnerVorhanden=true;
										ordner=interpretenOrdner[j].getAbsolutePath();
										break;
									case JOptionPane.NO_OPTION:
										ordnerVorhanden=false;
										break;
									case JOptionPane.CANCEL_OPTION:
										System.exit(0);
									}
								}
							}
 

didjitalist

Bekanntes Mitglied
Code:
String[] tokens = String.split( "-", file.getName() );
wenn der dateiname deinem pattern entspricht, dann hast du mit
Code:
tokens[ 0 ].trim();
den namen des verzeichnisses.
 

nuely

Mitglied
das allein reicht halt nicht. Dann würde Nelly feat. Justin Timberlake - Test.mp3 einen eigenen Ordner Namens Nelly feat. Justin Timberlake erstellen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
B Dateien / Bilder von "webapp" Ordner bekommen? Allgemeine Java-Themen 1
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
X Dateien von der Jar zum Ordner kopieren. Allgemeine Java-Themen 4
Ananaskirsche Input/Output Dateien im Ordner Allgemeine Java-Themen 8
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
T Ordner samt Dateien kopieren Allgemeine Java-Themen 11
B Dateien verschwinden aus bin Ordner?! Allgemeine Java-Themen 5
S Dateien aus src-Ordner lesen Allgemeine Java-Themen 3
G Ordner für Dateien finden Allgemeine Java-Themen 3
J Verschieben ganzer Dateien (und Ordner) Allgemeine Java-Themen 3
Q ||| Nur Dateien einlesen ohne Ordner. Allgemeine Java-Themen 6
D Dateien und ordner ausgabe Allgemeine Java-Themen 5
A Alle Ordner durchsuchen und Dateien finden Allgemeine Java-Themen 2
F Dateien in einem Ordner zählen Allgemeine Java-Themen 15
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
G Dateien lesen Allgemeine Java-Themen 3
OnDemand Unterschiedliche jar Dateien zusammen führen Allgemeine Java-Themen 8
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
Master3000 Dateien zwischen verschiedenen Netzwerken senden Allgemeine Java-Themen 17
L Jar Dateien in Classpath laden ab JDK 9+ Allgemeine Java-Themen 11
d.lumpi JDA eclipse dateien versenden Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
L Dateien richtig auslesen Allgemeine Java-Themen 6
L Eclipse Runnable Jar mit Dateien Allgemeine Java-Themen 8
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
MiMa Logging mit log4j2 in verschiedene Dateien? Allgemeine Java-Themen 22
O jar und EXE Dateien, Pfade zur Laufzeit Allgemeine Java-Themen 1
W Dateien werden nicht gelöscht - warum? Allgemeine Java-Themen 12
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
H Erste Schritte Ausführbare Dateien lassen sich nicht starten Allgemeine Java-Themen 5
I Java als exe veröffentlichen inkl. kompletter Dateien Allgemeine Java-Themen 4
M Drucken von Dateien Allgemeine Java-Themen 10
J jar Dateien unter Windows 7 mit spezifischer jdk öffnen Allgemeine Java-Themen 2
I Laden von Informationen aus Dateien: Austauschbarkeit: 2 Dateien sinnvoll? Allgemeine Java-Themen 2
N Temporäre Dateien Allgemeine Java-Themen 3
Bluedaishi Druck Probleme mit PDF dateien Allgemeine Java-Themen 4
M Dateien schneller kopieren Allgemeine Java-Themen 1
M Dateien nach kopieren vergleichen Allgemeine Java-Themen 9
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
K Große JSON-Dateien schnell und effizient verarbeiten Allgemeine Java-Themen 16
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
V Eclipse .class Dateien Allgemeine Java-Themen 9
B Download von dateien Allgemeine Java-Themen 2
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
MiMa Log4j in Dateien mit eigenem Namen schreiben Allgemeine Java-Themen 3
C Dateien in Jar aufrufen Allgemeine Java-Themen 14
X NetBeans Bilder und andere Dateien ins .jar schreiben und wieder aus .jar lesen Allgemeine Java-Themen 6
JavaWolf165 Externe .jar-Dateien in .jar-Datei intigrieren Allgemeine Java-Themen 0
X Dateien für Benutzer Sperren Allgemeine Java-Themen 4
D Dateien aus den Internet herunterladen Allgemeine Java-Themen 6
L Methoden Dateien älter als 30 Tage? Allgemeine Java-Themen 11
J .exe Dateien werden nicht gestartet obwohl Pfad richtig Allgemeine Java-Themen 6
RalleYTN Classpath Native Dateien(DLL, SO, JNILIB) Allgemeine Java-Themen 2
J Java .jar Dateien zusammenführen Allgemeine Java-Themen 1
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
F Platzsparende Alternative zu .txt-Dateien Allgemeine Java-Themen 12
X Herunterladen von Dateien aus dem Internet Allgemeine Java-Themen 2
V Input/Output Sound Dateien aus Jar laden Allgemeine Java-Themen 18
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
H PDFBox akzeptiert Dateien nicht Allgemeine Java-Themen 1
B Java - einlesen von Dateien und herausschneiden von XML Dokumenten Allgemeine Java-Themen 5
A Input/Output Spätes Schreiben von Dateien der JVM Allgemeine Java-Themen 3
M Zwei unterschiedliche JAR Dateien mit ANT erstellen Allgemeine Java-Themen 8
Thallius Dateien Zippen und wieder heraus lesen? Allgemeine Java-Themen 4
T Dateien zur Laufzeit in Java-Programm packen? Allgemeine Java-Themen 3
Maxim6394 Jar Dateien starten nicht Allgemeine Java-Themen 7
U Eclipse Java Programm beschädigt .tar.gz dateien beim Entpacken Allgemeine Java-Themen 7
GUI-Programmer Mp3 Dateien bearbeiten und speichern Allgemeine Java-Themen 3
S Exklusive Sperre auf Dateien: FileChannel, FileLock Allgemeine Java-Themen 0
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
OnDemand Dateien einlesen und vergleichen Allgemeine Java-Themen 1
R Importieren von Txt-Dateien in AbstractTableModel Allgemeine Java-Themen 0
C Dateien komprimieren und verschlüsseln Allgemeine Java-Themen 3
F Eclipse Eclipse kompiliert nicht mehr die aktuellen Dateien Allgemeine Java-Themen 2
R Java Dateien "verschlüsseln" Allgemeine Java-Themen 2
L Passwortgeschützte Dateien Allgemeine Java-Themen 6
A Datentypen Dateien umbenennen mit Dateiendungen - Dateiendungen ausgeben Allgemeine Java-Themen 2
L Reparieren beschädigter PDF Dateien Allgemeine Java-Themen 3
F Dateien ins Array lagern und Optionen zur Auswahl, Allgemeine Java-Themen 5
J XML Dateien vergleichen Allgemeine Java-Themen 9
B Umbenennen von Dateien Allgemeine Java-Themen 2
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
W Best Practice Dateien parsen Allgemeine Java-Themen 3
B Dateien prüfen auf Gleichheit Allgemeine Java-Themen 5
M Java Dateien verschieben Allgemeine Java-Themen 2
R Wav-Dateien wiederholt abspielen Allgemeine Java-Themen 2
L Methoden Verarbeitung von Größen Dateien Allgemeine Java-Themen 9
B Alt-Griechisch Zeichen in Dateien Allgemeine Java-Themen 2
M JAR Dateien nur mit Compiler Level 1.6 ausführbar Allgemeine Java-Themen 8
E Zugriff auf Dateien im Filesystem überwachen Allgemeine Java-Themen 5
G .jar Dateien lassen sich nicht mehr öffnen Allgemeine Java-Themen 2
M Datentypen Jar-Dateien öffnen nicht mit Java Allgemeine Java-Themen 4
C Mit Java PDF Dateien bearbeiten. Allgemeine Java-Themen 2
B Input/Output .java-Dateien auslesen Allgemeine Java-Themen 17
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben