Files verschieben in einen Ordner

Lia

Bekanntes Mitglied
moveToFolder(new File("C:\\Users\\Lias\\Desktop\\test"), new File("C:\\Users\\Lias\\Desktop\\test\\FS"), new File("C:\\Users\\Lias\\Desktop\\test\\Archiv"));
 

IAmFloppy

Bekanntes Mitglied
achsoooooo
Der Archiv Ordner ist in deinem Ordner 1 drin?
Mach mal den Archiv Ordner kurz aus deinem Test Ordner raus und versuche es nochmal mit dem neuen Pfad
Beim Ordner2 dasselbe
 

IAmFloppy

Bekanntes Mitglied
Hier nochmal eine verbesserte Version der Methode:

Java:
private void moveToFolder(File folder1, File folder2, File archiveFolder) {
        try {
            for (File file : folder1.listFiles()) {
                if (folder2.listFiles().length != 0) {
                    for (File folderTwoFile : folder2.listFiles()) {
                        if (file.getName().equals(folderTwoFile.getName())) {
                            Files.move(folderTwoFile.toPath(), new File(archiveFolder.getAbsolutePath() + "\\" + folderTwoFile.getName()).toPath());
                            Files.move(file.toPath(), new File(folder2.getAbsolutePath() + "\\" + file.getName()).toPath());
                        } else {
                            Files.copy(file.toPath(), new File(folder2.getAbsolutePath() + "\\" + file.getName()).toPath());
                        }
                    }
                } else {
                    Files.copy(file.toPath(), new File(folder2.getAbsolutePath() + "\\" + file.getName()).toPath());
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Und teste es mal mit
Java:
moveToFolder(new File("C:\\Users\\Lias\\Desktop\\test"), new File("C:\\Users\\Lias\\Desktop\\test2"), new File("C:\\Users\\Lias\\Desktop\\Archiv"));

Musst natürlich die Ordner dann auch kurz so verschieben
 

Lia

Bekanntes Mitglied
Also ich peil gerade gar nix mehr xD , man das tut mir sooo leid :(
wenn ich das so ausführe kopiert er mir jetzt alles inkl Ordner (die gleiche Struktur) in den Ordner2?????
Genau in Ordner1 sind der ARCHIV Ordner und der Ordner2
 

IAmFloppy

Bekanntes Mitglied
Es ist gerade wirklich etwas verwirrend, ist aber nicht deine Schuld, da gerade Missverständnisse aufgetreten sind xD
Also die Methode verschiebt quasi alle Dateien in Ordner1 in Ordner2 und wenn diese Datei schon in Ordner2 existiert, überschreibt er sie, nachdem er sie ins Archiv schickt.
Und die Ordner, die du in deinem Test Ordner hast sind eben auch Dateien. Aber das lässt sich denke ich mal beheben.
Ich schicke dir in einer Minute eine neue Version, die das beheben müsste
 

mihe7

Top Contributor
wenn ich zb @mihe7 sein Code ausführe, funktioniert er soweit wie meiner, aber sobald ich in allen drei Ordnern die selbe Datei habe und quasi versuche wieder die aktuelle testdatei in den Ordner2 zu verschieben kommt die meldung" File Already exist"
Aber doch nicht, wenn Du StandardCopyOption.REPLACE_EXISTING verwendest, oder?
 

IAmFloppy

Bekanntes Mitglied
Java:
private void moveToFolder(File folder1, File folder2, File archiveFolder) {
        try {
            for (File file : folder1.listFiles()) {
                if (!file.isDirectory()) {
                    if (folder2.listFiles().length != 0) {
                        for (File folderTwoFile : folder2.listFiles()) {
                            if (!folderTwoFile.isDirectory()) {
                                if (file.getName().equals(folderTwoFile.getName())) {
                                    Files.move(folderTwoFile.toPath(), new File(archiveFolder.getAbsolutePath() + "\\" + folderTwoFile.getName()).toPath());
                                    Files.copy(file.toPath(), new File(folder2.getAbsolutePath() + "\\" + file.getName()).toPath());
                                } else {
                                    Files.copy(file.toPath(), new File(folder2.getAbsolutePath() + "\\" + file.getName()).toPath());
                                }
                            }
                        }
                    } else {
                        Files.copy(file.toPath(), new File(folder2.getAbsolutePath() + "\\" + file.getName()).toPath());
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Jetzt kannst du es wie vorher ausprobieren mit
Java:
moveToFolder(new File("C:\\Users\\Lias\\Desktop\\test"), new File("C:\\Users\\Lias\\Desktop\\test\\FS"), new File("C:\\Users\\Lias\\Desktop\\test\\Archiv"));
 

Lia

Bekanntes Mitglied
genau das funktioniert soweit wobei dir dateien auch nicht im Ordner1 bleiben sollten :( , und wenn ich dann eine test1.txt wieder versuche von ordner1 aus zu verschieben, bekomme ich die fehlermeldung already exist exception..
Das stimmt ja auch, die Datei befindet sich ja auch in allen drei Ordnern aber das Archiv soll ja wieder eine neue version bekomme aus Ordner2..

Bist vermutlich genervt von mir xD :(
 

IAmFloppy

Bekanntes Mitglied
Ich bin nicht so schnell von Menschen genervt, vor allem nicht, wenn sie ein Problem haben und Hilfe brauchen :)
Ich helfe dir gerne, da ich gerade eh nichts zu tun habe xD
Also willst du, dass die Datei, die von Ordner1 in Ordner2 verschoben wird, dann auch entfernt wird?
Kannst du mir mal die genaue Fehlermeldung senden? Oder steht da wirklich nur "File already exists"?
 

Lia

Bekanntes Mitglied
Wie lieb vielen Dank :)
genau von Ordner1 in Ordner2 (aber wird von Ordner1 aus quasi verschoben in Ordner2) und dann von Ordner2 das was vorher in Ordner2 drin war in den Archiv Ordner
 

IAmFloppy

Bekanntes Mitglied
Java:
private void moveToFolder(File folder1, File folder2, File archiveFolder) {
    try {
        for (File file : folder1.listFiles()) {
            if (!file.isDirectory()) {
                if (folder2.listFiles().length != 0) {
                    for (File folderTwoFile : folder2.listFiles()) {
                        if (!folderTwoFile.isDirectory()) {
                            if (file.getName().equals(folderTwoFile.getName())) {
                                Files.move(folderTwoFile.toPath(), new File(archiveFolder.getAbsolutePath() + "\\" + folderTwoFile.getName()).toPath(), StandardCopyOption.REPLACE_EXISTING);
                                Files.move(file.toPath(), new File(folder2.getAbsolutePath() + "\\" + file.getName()).toPath(), StandardCopyOption.REPLACE_EXISTING);
                            } else {
                                Files.move(file.toPath(), new File(folder2.getAbsolutePath() + "\\" + file.getName()).toPath(), StandardCopyOption.REPLACE_EXISTING);
                            }
                        }
                    }
                } else {
                    Files.move(file.toPath(), new File(folder2.getAbsolutePath() + "\\" + file.getName()).toPath(), StandardCopyOption.REPLACE_EXISTING);
                }
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Versuchs mal damit. :)
Ich habe jetzt
Java:
StandardCopyOption.REPLACE_EXISTING
hinzugefügt.
Das heißt, wie du es wahrscheinlich schon bemerkt hast, dass es eben eine existierende Datei überschreiben soll, falls sie überhaupt da ist.
Damit müsste es eigentlich funktionieren. :D
 

IAmFloppy

Bekanntes Mitglied
Mensch, wir sitzen jetzt schon so lange an einer kleinen Funktion :D
Google Mitarbeiter würden uns jetzt wahrscheinlich auslachen xD
Ich bin froh, wenn wir das Problem gelöst haben
 

Lia

Bekanntes Mitglied
ok also, es funktioniert FAST XD
wenn ich es aus dem Ordner1 zb mit einer test2.txt probiere, löscht sie sich aus dem Ordner2 und ich bekomme die exception java.nio.file.NoSuchFileException: C:\Users\Lias\Desktop\test\test2.xlsx



Und noch eine Frage nebenbei, gibt es eine Funktion, die alle dateien aus dem Ordner nimmt? weil im moment muss ich es immer ausführen damit er jede einzeln in den Ordner2 schiebt :/
 

mihe7

Top Contributor
Ich will Euch ja nicht stören, aber funktioniert das hier nicht?
Java:
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.io.File;
import java.io.IOException;

public class Test {
    public static void moveAll(File sourceFolder, File destFolder, File archiveFolder) throws IOException {
        Path source = sourceFolder.toPath();
        Path dest = destFolder.toPath();
        Path archive = archiveFolder.toPath();

        assertDirectory(source);
        assertDirectory(dest);
        assertDirectory(archive);
        
        for (File sourceFile : sourceFolder.listFiles()) {
            move(sourceFile.toPath(), dest, archive);
        }
    }

    private static void move(Path sourceFile, Path destFolder, Path archiveFolder) throws IOException {
        if (!Files.isRegularFile(sourceFile)) {
            return;
        }

        Path destPath = destFolder.resolve(sourceFile.getFileName());
        if (Files.exists(destPath)) {
            Files.move(destPath, archiveFolder.resolve(sourceFile.getFileName()), StandardCopyOption.REPLACE_EXISTING);
        }
        Files.move(sourceFile, destPath);
    }

    private static void assertDirectory(Path path) {
        if (!Files.isDirectory(path)) {
            throw new IllegalArgumentException("Not a directory: " + path);
        }
    }    

    public static void main(String[] args) throws Exception {
        moveAll(new File("folder1"), new File("folder2"), new File("folder2/archive"));
    }
}
 

Lia

Bekanntes Mitglied
:)
wenn ich deinen @mihe7 Code ausführe, funktioniert er soweit wie meiner, aber sobald ich in allen drei Ordnern die selbe Datei habe und quasi versuche wieder die aktuelle testdatei in den Ordner2 zu verschieben kommt die Meldung" File Already exist"
 

mihe7

Top Contributor
wenn ich deinen @mihe7 Code ausführe, funktioniert er soweit wie meiner, aber sobald ich in allen drei Ordnern die selbe Datei habe und quasi versuche wieder die aktuelle testdatei in den Ordner2 zu verschieben kommt die Meldung" File Already exist"
Hast Du den zuletzt gepostesten Code probiert und nur in main die Ordner entsprechend angepasst?
 

IAmFloppy

Bekanntes Mitglied
wenn ich es aus dem Ordner1 zb mit einer test2.txt probiere, löscht sie sich aus dem Ordner2 und ich bekomme die exception java.nio.file.NoSuchFileException: C:\Users\Lias\Desktop\test\test2.xlsx
Du hast es mit einer .txt Datei probiert aber bekommst den Fehler von einer xlsx? Das ist äußerst komisch.
Eigentlich dürfte es sich nicht löschen, ich habe den Fehler bei mir nicht feststellen können. :(
 

Lia

Bekanntes Mitglied
habe das jetzt mal mit @mihe7 seinem Code probiert , habe noch eine kleine Frage, was bedeutet "assertDirectory"? also habe vorher nichts davon gehört :/

Danke vielmals euch beiden :)
 

mihe7

Top Contributor
OK ICH FRESS N BESEN, es Funktioniert!!!!!!!

Gott sei Dank, ich habe mich hier mental schon auf einen Bug-Report eingestellt.

@mihe7 hatttest du was am Code geändert??? also vom letzten Post ??
Ja, das was ich in Kommentar #22 geschrieben habe: REPLACE_EXISTING hinzugefügt, damit die vorhandene Datei überschrieben wird.

im Grunde genommen braucht man es aber nicht oder ?
Was heißt brauchen? Du kannst es weglassen und es wird trotzdem funktionieren. Mit den assert-Teilen wird nur sichergestellt, dass die Voraussetzungen gegeben sind.
 

Lia

Bekanntes Mitglied
@mihe7 xDDD gut das es nicht soweit kam xD

vlt ne dumme Frage, aber dieses asset gibt es auch so als funktion oder ? (Frage nur aus intresse :D)
 

mihe7

Top Contributor
Es gibt in Java eine assert-Anweisung, die zu Fehlern (AssertionError) führt, wenn die angegebene Bedingung nicht eingehalten wurde. Diese sind standardmäßig deaktiviert und werden zum Testen aktiviert.

Das andere sind einfach ganz gewönliche selbstgeschriebene Methoden. Ich hätte es z. B. auch methodeDieSicherstelltDasDerAngegebenePfadAuchWirklichEinVerzeichnisIst nennen können, das war mir dann aber doch zu lang :)
 
X

Xyz1

Gast
Kannst du mir erklären, was daran nicht so gut ist? Nehme gerne Kritik an :D
Kann ich,
1. es ist nicht nur unschön, es ist auch falsch,
2. es käme durch kein professionelles Review,
3. man merkt daran, dass Du noch Anfänger bist.

Merke: Je kompakter der Code (horizontal gesehen), desto mehr Skills hatte derjenige der es geschrieben hat.

Längere als 20 Zeilen-Methoden werden dagegen heute nicht mehr so genau gesehen und gelten als obsolet.
 

IAmFloppy

Bekanntes Mitglied
2. es käme durch kein professionelles Review,
Kannst du mir mehr erklären, wieso das so ist? :)

3. man merkt daran, dass Du noch Anfänger bist.
Das stimmt ^^ Ich bin ja auch erst 15 und hatte das noch nie in der Schule :D Kommt aber alles noch

Längere als 20 Zeilen-Methoden werden dagegen heute nicht mehr so genau gesehen und gelten als obsolet.
Das wusste ich tatsächlich noch nicht :) Naja jetzt weiß ich es.

Danke für die Kritik und gute Nacht :)
 

mihe7

Top Contributor
Kannst du mir mehr erklären, wieso das so ist?
Mal ein paar Punkte:

1. folder1, folder2 und folderTwoFile sind keine aussagekräftigen Bezeichner.
2. Wenn Du nur den Rumpf der Methode betrachtest, weißt Du nicht "sofort", worum es in der Methode geht
3. Wiederholung von Code (die Zeile Files.move(file.toPath(), ...) taucht dreimal auf)
4. Fehler: die Existenz einer Datei wird durch einen String-Vergleich ermittelt. Das führt bei Dateisystemen, die case insensitive arbeiten ggf. dazu, dass Daten verloren gehen.

Bei meinem Code könnte man z. B. bemängeln, dass assertDirectory dreimal wiederholt wird, auch kann man sich fragen, ob die Methoden überhaupt benötigt wird. Außerdem sollte man moveAll auf zwei Methoden aufteilen: eine für File-Objekte und eine für Path-Objekte.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Fehlerhafte XML-Files verschieben Java Basics - Anfänger-Themen 6
Files öffnen Java Basics - Anfänger-Themen 17
M Files Java Basics - Anfänger-Themen 7
B jar files libraries Java Basics - Anfänger-Themen 2
A Files aufteilen Java Basics - Anfänger-Themen 4
A Java, verarbeitung eines xml-files Java Basics - Anfänger-Themen 2
Rakshan Running jar files, resulting in failure Java Basics - Anfänger-Themen 11
C Wo speichere ich die Jar-Files zu JGoodies FormLayout? Java Basics - Anfänger-Themen 4
F Input/Output Files von A nach B kopieren Java Basics - Anfänger-Themen 11
B Name von Verzeichnis bekommen - Files von einem Ordner auslesen Java Basics - Anfänger-Themen 4
J Kann man files in einer Klasse speichern. Java Basics - Anfänger-Themen 2
N Best Practice files[i].getAbsoluteFile() mit Sondezeichen im Vezeichnisnamen Java Basics - Anfänger-Themen 2
F ActionListener mit Files etc Java Basics - Anfänger-Themen 12
H Pfad Program Files\Common Files\Oracle\Java\javapath Java Basics - Anfänger-Themen 3
X Variablen Problem bei Aufteilung in verschiedene Class-Files Java Basics - Anfänger-Themen 4
T Input/Output Einlesen eines .txt Files nur bei gesetztem Breakpoint möglich Java Basics - Anfänger-Themen 1
M DBF-Files und Encoding Java Basics - Anfänger-Themen 4
X Finde die Files über FTP nicht Java Basics - Anfänger-Themen 4
U Properties außerhalb des war-Files Java Basics - Anfänger-Themen 1
N Lesen eines files mit FILES.lines Java Basics - Anfänger-Themen 11
D CSV Files richtig zusammenführen Java Basics - Anfänger-Themen 3
U Java logging generiert unerwünschten files Java Basics - Anfänger-Themen 1
C Klassen Class Files nachladen (mehrer .jar Dateien) Java Basics - Anfänger-Themen 2
S Ordnerstrukturen durchsuchen und Files bearbeiten Java Basics - Anfänger-Themen 6
G Existenz eines Files Java Basics - Anfänger-Themen 1
N Files außerhalb eines des jar-files einlesen mac Java Basics - Anfänger-Themen 10
O Files eines Directories innerhalb eines JAR-Files auflisten Java Basics - Anfänger-Themen 0
S Input/Output .txt-Files NEBEN .jar Java Basics - Anfänger-Themen 3
B Relativer Pfad zwischen zwei Files Java Basics - Anfänger-Themen 2
F Speicherlast mehrere GB durch kleine png files? Java Basics - Anfänger-Themen 1
C xsd validation with xsd files with dependencies ("schemalocation") Java Basics - Anfänger-Themen 1
R Rekursive Methode, Files finden Java Basics - Anfänger-Themen 2
Kenan89 XML-Files erstellen wirft File not found Exception Java Basics - Anfänger-Themen 9
B Files.copy wirft Exeption Java Basics - Anfänger-Themen 2
V java nio Files.copy Java Basics - Anfänger-Themen 10
C Automatisches Ausfuehren einer Funktion beim Laden eines Jar files Java Basics - Anfänger-Themen 3
A JDK installieren jar-Files ausführen Java Basics - Anfänger-Themen 12
A Datei relativ zur Lage des jar-files lesen Java Basics - Anfänger-Themen 16
L Methoden Files.walkFileTree implementation Java Basics - Anfänger-Themen 3
6 JDK installieren Runnable Jar Files ausführen?! Java Basics - Anfänger-Themen 8
G NetBeans Contains files with errors Java Basics - Anfänger-Themen 14
M Input/Output Namen der Files aus einem Ordner MIT bestimmten Encoding auslesen? Java Basics - Anfänger-Themen 3
H Jar Files verwenden Java Basics - Anfänger-Themen 9
J Wie auf eine Datei innerhalb des JAR-Files zugreifen Java Basics - Anfänger-Themen 2
N Files mit Byte an Socket versenden Java Basics - Anfänger-Themen 2
G Inhalt Jar-Files anzeigen, incl. Methoden Java Basics - Anfänger-Themen 2
S Exception: Too many open files Java Basics - Anfänger-Themen 6
apple987123 JAR Files Funktionieren nicht Java Basics - Anfänger-Themen 6
B Files aus Verzeichnis zählen Java Basics - Anfänger-Themen 9
M Online-Java-Games offline spielen? / Jar-Files zum laufen bringen? Java Basics - Anfänger-Themen 6
E ResourceBundles in Jar-Files Java Basics - Anfänger-Themen 5
M Sha256-Wert eines Files bestimmen Java Basics - Anfänger-Themen 13
S Hilfe es werden keine class files erstellt Java Basics - Anfänger-Themen 5
Y Applet lokal executable machen, externe Files inkludieren Java Basics - Anfänger-Themen 8
S String repräsentation eines XML-Files für Textarea formatieren. Java Basics - Anfänger-Themen 2
J Anfänger-Frage zu jar-Files / Manifest.mf / Classpath Java Basics - Anfänger-Themen 16
B Verzeichnisse und Dateien in JAR Files Java Basics - Anfänger-Themen 7
S Kein Zugriff auf Files in Jar-Datei Java Basics - Anfänger-Themen 4
G Zusammenfassung mehrerer jar-Files Java Basics - Anfänger-Themen 3
B Erstellen von tar Files Java Basics - Anfänger-Themen 2
G Teil eines Files einlesen und vergleichen Java Basics - Anfänger-Themen 4
U Habe meine .class files gelöscht. Java Basics - Anfänger-Themen 3
T Jar: Zugriff auf Dateien inner- unter außerhalb d. jar-Files Java Basics - Anfänger-Themen 3
M java mehrere jar files uebergeben Java Basics - Anfänger-Themen 5
L Alle Files eines Directories einlesen Java Basics - Anfänger-Themen 6
T Png files nach auslesen von BMP ohne Inhalt Java Basics - Anfänger-Themen 2
V Sprache umschalten mit properties-files mit KSKB Java Basics - Anfänger-Themen 3
G Pfad des Jar-Files ermitteln bzw. wo Datenbank speichern Java Basics - Anfänger-Themen 4
D Files aus Directory lesen Java Basics - Anfänger-Themen 2
roflomfg Parameterübergabe in in "*.jar" files möglich? Java Basics - Anfänger-Themen 8
P Import jar files: Wohin? Java Basics - Anfänger-Themen 2
J Mit JDOM HTML Files erzeugen? Java Basics - Anfänger-Themen 7
M Path eines Files Java Basics - Anfänger-Themen 24
G tomcat und class files Java Basics - Anfänger-Themen 5
G class Files zu exe ---> decompilieren? Java Basics - Anfänger-Themen 2
M Files löschen - alle, ausser das größte! Java Basics - Anfänger-Themen 3
J Werte eines XML Files überschreiben Java Basics - Anfänger-Themen 7
B erweiterte jar files - verbinden Java Basics - Anfänger-Themen 4
P JFileChooser soll nur .txt files anzeigen Java Basics - Anfänger-Themen 5
D Files Readen und Substring Java Basics - Anfänger-Themen 5
M Properties ausserhalb von jar files Java Basics - Anfänger-Themen 3
J Drucken von files Java Basics - Anfänger-Themen 4
F Java-Programm in mehreren files Java Basics - Anfänger-Themen 6
B JFileChooser für Files and Directories Java Basics - Anfänger-Themen 3
M Audio Files mit Base64 De-/Endcodieren Java Basics - Anfänger-Themen 5
C letzte Zeilen eines Files auslesen Java Basics - Anfänger-Themen 3
A Einbindung von .wav files. Java Basics - Anfänger-Themen 8
F Hilfe beim erstellen von Jar files! Java Basics - Anfänger-Themen 2
M alle Files aus einem Verzeichnis finden Java Basics - Anfänger-Themen 15
A Existenz eines Files abfragen Java Basics - Anfänger-Themen 13
G speichern von files Java Basics - Anfänger-Themen 2
A Einige Fragen zu Files Java Basics - Anfänger-Themen 2
D JAR-Files ausführbar machen Java Basics - Anfänger-Themen 28
Z prob beim erstellen eines jar files mit eclipse Java Basics - Anfänger-Themen 4
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
U Ascii wert verschieben, wie möglich? Java Basics - Anfänger-Themen 3
J Verschieben von Buchstaben in einem String um vorgegebene Anzahl von Zeichen innerhalb eines weiteren String Java Basics - Anfänger-Themen 12
Elyt JFrame in den Hintergrund verschieben Java Basics - Anfänger-Themen 3
OSchriever JFrame-Anwendungsfenster verschieben Java Basics - Anfänger-Themen 17
S Input/Output JLabel verschieben Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben