Zwei Dateien auf ungleiches Datum + Zeit vergleichen



  • Hallo,

    im Unterforum C++ habe ich bereits eine Anfrage gestellt gehabt. Da mir die Sprache als "blutiger Anfänger" doch etwas schwerfällt, bin ich zu Java gewechselt und komme deutlich besser voran als mit C++.

    Falls es jemanden interessiert - Hier der Link zum alten Thema im C++ Unterforum.

    Jetzt bin ich allerdings schon viel weiter.

    Und zwar muss die neuere, namensgleiche Datei (die immer im temporären Verzeichnis liegt) mit der bestehenden, namensgleichen Datei (die immer im bestehenden Verzeichnis liegt (derzeit das Verzeichnis "Hallo"), auf Datum und Zeit verglichen werden.

    Sollte die Datei im temporären Ordner zeitlich aktueller sein als die im Bestandverzeichnis, soll die Datei im Bestandsverzeichnis durch die neue ersetzt werden. Andernfalls soll der Kopiervorgang übersprungen werden.

    Es darf nur in eine Richtung kopiert werden (temporäres -> bestehendes) andersherum nicht. Deshalb kann ich kein != (ungleich) verwenden.

    Das Problem bei meinem Code ist jetzt, dass er nicht in die IF-Anweisung
    ( if (Zeit1.getTime() < Zeit.getTime()) )springt, sondern diese völlig ignoriert.
    Außerdem kann er mit dem größer als nichts anfangen

    File Quelldatei = new File("C:/Users/NAME/Desktop/GUP/Updates/GTemp");
    	     File Zieldatei = new File ("C:/Users/NAME/Desktop/GUP/Verzeichnis");
    	     File[] fileArray = Quelldatei.listFiles();
    	     File[] fileH = Zieldatei.listFiles();
    	     Boolean vorhanden = false;
    	     for (int i = 0; i < fileArray.length; i++)
    	     {
    	    	 File download = new File("C:/Users/NAME/Desktop/GUP/Verzeichnis" + fileArray[i].getName());
     			 Calendar te = Calendar.getInstance();
     			 te.setTimeInMillis(download.lastModified());
     			 Date Zeit1 = te.getTime();
    			 DateFormat Format1 = new SimpleDateFormat();
    			 System.out.println(Format1.format(Zeit1));
    
     			for (int j = 0; j < fileH.length; j++)
    	    	 {
    
     				if (fileArray[i].getName().matches(fileH[j].getName()))
    	    		{
    	    			File Daten1 = new File("C:/Users/NAME/Desktop/GUP/Verzeichnis/" + fileH[j].getName());
    	    			Calendar Kalender1 = Calendar.getInstance();
    	    			Kalender1.setTimeInMillis(Daten1.lastModified());
    	    			Date Zeit = Kalender1.getTime();
    	    			DateFormat Format = new SimpleDateFormat();
    	    			System.out.println(Format.format(Zeit));
    
    	    			if (Zeit1.getTime() < Zeit.getTime())
    	    			{
    	    				System.out.println("FUNKTIONIERT");
    	    				 Path moveSourcePath = Paths.get(Quelldatei + "/" + fileArray[i].getName());
    	    		    	 Path moveTargetPath = Paths.get(Zieldatei + "/" + fileArray[i].getName());
    	    		    	 Daten1.delete();
    	    		    	 Files.move( moveSourcePath, moveTargetPath);
    	    		    	 vorhanden = true;
    	    			}
    	    			else if (te.equals(Kalender1))
    	    			{
    
    	    				if (i > j)
    	    				{
    	    					 Path moveSourcePath = Paths.get(Quelldatei + "/" + fileArray[i].getName());
    		    		    	 Path moveTargetPath = Paths.get(Zieldatei + "/" + fileArray[i].getName());
    		    		    	 Daten1.delete();
    		    		    	 Files.move(moveSourcePath, moveTargetPath);
    		    		    	 vorhanden = true;
    	    				}
    	    		     }
    	    		}
    	    	 }
    
     			if (!vorhanden)
     			{
     				Path moveSourcePath = Paths.get(Quelldatei + "/" + fileArray[i].getName());
    		    	Path moveTargetPath = Paths.get(Zieldatei + "/" + fileArray[i].getName());
    		    	Files.move( moveSourcePath, moveTargetPath);
     			}
     			else
     			{
     				vorhanden = false;
     			}
    
    	     }
    
    	    //deleteDir(new File("C:/Users/NAME/Desktop/GUP/Updates/GTemp"));
    
    	}
    
    }
    


  • Du willst doch die Datumsangaben der Dateien vergleichen? DateFormat ist doch nur zur Formatierung dar. Also mußt du 'time' mit 'time1' vergleichen.



  • Ja das funktioniert aber nicht mit " größer als ( > ) "

    Ich möchte das Datum und Uhrzeit der namensgleichen Dateien, welches sich jeweils in einem anderen Ordner befinden, vergleichen und wenn das Datum und die Uhrzeit der ersten Datei höher ist soll der die zweite Datei durch die erste Datei ersetzen.

    Also z.B.

    Datei 1 hat Datum 01.04.2017 und 2 Datei hat 22.03.2017 dann soll die 2 durch die 1 Datei ersetzt werden.

    Gleiches soll gelten, wenn beide das gleiche Datum haben also z.B. 01.04.2017 aber die Uhrzeit der 1 Datei ist höher als bei der 2 also z.B. 1 Datei hat 22:04 und 2 Datei hat 21:50.

    Es soll halt immer die aktuellste Datei mit der älteren Datei ersetzt werden.
    Und ich kann kein ungleich ( != ) verwenden, da sonst willkürlich getauscht wird, da bei unterschiedlichen Daten beide Dateien ein ( != ) aufweisen und mal das ältere durch das neuere oder umgekehrt ersetzt wird. Das ist zu ungenau.





  • Wie gesagt ich bin noch anfänger und hab schon alle möglichen Seiten im Netz durch (auch die gezeigte von dir).

    Da ich es nicht verstehe hatte ich mich hier gemeldet und hatte gedacht, dass mir jemand mit dem vorhandenen Code von mir behilflich sein kann den etwas umzubauen sodass es funktioniert und ich mir das einmal genauer anschauen kann wie das dann gelöst wurde um es zu verstehen.

    Ein einfacher Link hilft mir derzeit nicht wirklich



  • Okay,

    habs hinbekommen.

    Gibt es auch eine Möglichkeit nur das Änderungsdatum einer Datei auszulesen - ohne Uhrzeit! ???

    Das hier funktioniert nicht.

    for (int i = 0; i < fileH.length; i++)
    	     {
    	    	 Date heute = new Date();
    	    	 Date datum = new Date (fileH[i].lastModified());
    

Log in to reply