Files verschieben in einen Ordner

Bitte aktiviere JavaScript!
Hi liebes Forum ,

Wieder mal eine Frage,

Ich habe drei Ordner. In dem ersten Ordner habe ich drei Test Dateien (test1,test2,test3)
In dem zweiten Ordner befindet sich bereits eine test1 Datei.

Nun sollen die Dateien aus dem ersten Ordner (test1, test2, test3) in den zweiten verschoben werden (wo test1) bereits drin ist.

Sobald die Dateien verschoben werden, soll die test1 Datei aus dem zweiten Ordner in ein neuen Ordner Archiv verschoben werden.

Der Ablauf funktioniert ich lese beide Ordner mit einer foreach Schleife aus. Wenn ich das Programm starte, dann führt er aber nur die erste Schleife aus, sobald ich nochmal das Programm ausführe verschiebt er es dann in den nächsten Ordner. Wieso führt er nicht beide schleifen auf einmal aus ??

Liebe Grüße
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Nun sollen die Dateien aus dem ersten Ordner (test1, test2, test3) in den zweiten verschoben werden (wo test1) bereits drin ist.

Sobald die Dateien verschoben werden, soll die test1 Datei aus dem zweiten Ordner in ein neuen Ordner Archiv verschoben werden.
Sollte das nicht andersherum passieren? Erst in den Archiv Ordner verschieben, dann in den zweiten Ordner. Sonst überschreibst du erst die Datei, die ins Archiv soll.
 
Also ich hatte sowas hier schon versucht:

for (File filetest1 in listofFilesTest1)
if(filtest1.isFile()){ }
for(File filetest2 in listofFilesTest2){}
if(filetest2.isFile(){ }

die Ordnerstruktur sieht folgendermaßen aus

Ordner1 (liegen die test Dateien 1-3) im Ordner2 liegt noch gar nichts(in den Ordner2 werden die Dateien aus dem Ordner1 einfach hinverschoben)
Wenn eines der Dateien, welches aus dem Ordner1 kommt, bereits in dem Ordner zwei vorhanden ist (was vlt in einem Schritt vorher schonmal reingeschoben wurde welches in dem Fall dann eine ältere Version vn der Datei ist) , soll diese Datei aus Ordner2 ins Archiv verschoben werden.

Ich denke der Fehler liegt in dem Abschnitt, den ich hier reingepostet habe.. Wenn ich das für das erste Mal ausführe fuktioniert es. Aber beim 3-4 mal schiebt er dann aufeinmal alles weg..

LG
 
Also, mal ganz langsam:
Ordner1 (liegen die test Dateien 1-3) im Ordner2 liegt noch gar nichts(in den Ordner2 werden die Dateien aus dem Ordner1 einfach hinverschoben)
for (File filetest1 in listofFilesTest1)
if(filtest1.isFile()){ }
for(File filetest2 in listofFilesTest2){}
if(filetest2.isFile(){ }
Wenn Du die Dateiliste für Ordner2 erstellst, bevor Du Dateien verschoben hast, ist die Liste leer und bleibt auch nach dem Verschieben leer.
 
Hi @mihe7 , vielen Dank für deine Nachricht. Das mit dem verschieben habe ich inzwischen gelöst :-D
Ein neues Problem, was jetzt aufgetaucht ist.

Ordner1 = test.xlsx
Ordner2 = test.xlsx
Archiv = test.xlsx

Im Ordner1 laden immer die aktuellste Datei. Diese werden in den Ordner2 verschoben.. falls sich schon im Archiv eine alte Version dieser Dartei befindet(welches ebenfalls den gleichen Namen hat), soll diese mit der neuen Version vom Ordner2 überschrieben werden.. denke es ist wieder verwirred erklärt von mir xD..

for (int i = 0; i < listofFilesTest1.length;i++){
for (int j= 0; j < listofFilesTest2.length;j++){
for (int k = 0; k < listofFilesTestArchiv.length;k++){
if(listofFilesTest2[j].getName().equals(listofFilesTestArchiv[k].getName())){
listofFilesTestArchiv[k].delete();
}


An dieser Stelle löscht er diese Datei, dann aber aus allen Ordnern, dass soll nicht passieren. Es soll diese Datei nur gelöscht werden, damit die "neuere " version aus dem zweiten Ordner in dem Archiv hinterlegt werden kann.
(Verwirrung ?) xD

weiß auch nicht genau ob ich dafür eine neue frage aufmachen soll xD
 
Kannst du damit was anfangen?
Wenn nein, wäre es gut, wenn du Fragen zum Code stellen würdest.
Es bringt dir natürlich nichts nur den Code zu nehmen, ohne ihn zu verstehen.
Das müsste eigentlich funktionieren.
Wenn du noch Unterordner verschieben willst musst du halt abfragen, ob "file" ein Directory ist und wenn ja, musst du wieder eine for Schleife mit den Unterfiles machen.
Kannst dir auch gerne mal Rekursionen anhand von Files ansehen.

Java:
 /**
     * Will move all files from a folder to another folder
     *
     * @param folder       is the folder which contains the files which you want to move
     * @param targetFolder is the folder where you want to move the files
     */
    private void moveToFolder(File folder, File targetFolder) {
        for (File file : folder.listFiles()) {
            try {
                Files.move(file, new File(targetFolder + "\\" + file.getName()));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
 
Hi @IAmFloppy , sehr lieb von dir!
ich hatte das zuerst mit einer Foreach probiert, habe jetzt aber jeweils für jeden Ordner eine for schleife gemacht..
Der Ordner2 soll quasi immer wenn es neue neue Datei hinterlegt bekommt (ordner1), die Date die vorher drin war archivieren.
Dh. das "überschreiben" im Archiv Ordner mit der Datei aus dem Ordner2, passiert nur, wenn die Datei in allen drei Ordnern vorhanden ist.
 
Das heißt nochmal zur Wiederholung:

Der dritte Ordner ist ein Archivordner?
Und alle Dateien sollen von Ordner1 in Ordner2 verschoben werden.
Und wenn diese schon vorhanden sind, sollen sie überschrieben aber vorher in den dritten Ordner verschoben werden?
 
Genau, also wenn die Datei schon im Archiv Ordner vorhanden ist.

Somit soll der Ordner 3 immer die "ältere Version" der Datei aus dem Ordner2 haben
 
Ich hoffe, dass ich es jetzt richtig geschafft habe.
Wenn nicht, entschuldige, bin noch ein bisschen müde und verwirrt, weil ich morgen eine Mathearbeit schreibe. xD

Der Code geht alle Dateien des ersten Ordners durch und schaut ob diese Datei auch im zweiten Ordner ist.
Wenn nein, dann movet er sie da rein.
Wenn doch, dann movet er die alte Datei in den Archivordner und movet dann die Datei vom Ordner1 zum Ordner2.

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.move(file.toPath(), new File(folder2.getAbsolutePath() + "\\" + file.getName()).toPath());
                        }
                    }
                } else {
                    Files.move(file.toPath(), new File(folder2.getAbsolutePath() + "\\" + file.getName()).toPath());
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
Wenn du willst, dass die Dateien trotzdem noch in Ordner1 bleiben, auch wenn sie in Ordner2 gemovet wurden, musst du
Java:
Files.move
umändern in

Java:
Files.copy
 
Java:
import java.nio.file.Files;
import java.nio.file.Path;
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()));
        }
        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"));
    }
}
 
Also in Grunde genommen, funktioniert in meinem Code lassen, außer das er wenn die Datei in allen drei Ordnern existiert , die Datei aus Ordner 2 nicht mit der alter alten Datei aus dem Archiv Order "überschreibt "
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben