FileWatcher : Erst Rückmeldung wenn komplett kopiert?

beta20

Top Contributor
Hallo zusammen,

ich möchte gerne einen FileWatcher einsetzen, was auch soweit tut.
Sobald ein neues File in den angegebenen Ordner kommt, bekomme ich eine Rückmeldung.
Jetzt ist aber das Problem, dass sofort wenn eine Datei in den Ordner kommt, eine Rückmeldung kommt.
Heißt wenn ich ein z.B. 600 MB großes File habe, dass dann das File u.U. noch gar nicht komplett in den Ordner kopiert wurde, aber ich schon eine Rückmeldung habe, dass ein neues File gekommen ist.
Ich möchte also die Rückmeldung erst, wenn das File komplett kopiert wurde:
Hier mal der Code:

Code:
import static java.nio.file.LinkOption.NOFOLLOW_LINKS;
import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
import static java.nio.file.StandardWatchEventKinds.OVERFLOW;

import java.io.IOException;
import java.nio.file.FileSystem;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.WatchEvent;
import java.nio.file.WatchEvent.Kind;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;

public class MainWatch {

    public static void watchDirectoryPath(Path path) {
        // Sanity check - Check if path is a folder
        try {
            Boolean isFolder = (Boolean) Files.getAttribute(path,
                    "basic:isDirectory", NOFOLLOW_LINKS);
            if (!isFolder) {
                throw new IllegalArgumentException("Path: " + path + " is not a folder");
            }
        } catch (IOException ioe) {
            // Folder does not exists
            ioe.printStackTrace();
        }
       
        System.out.println("Watching path: " + path);
       
        // We obtain the file system of the Path
        FileSystem fs = path.getFileSystem ();
       
        // We create the new WatchService using the new try() block
        try(WatchService service = fs.newWatchService()) {
           
            // We register the path to the service
            // We watch for creation events
            path.register(service, ENTRY_CREATE);
           
            // Start the infinite polling loop
            WatchKey key = null;
            while(true) {
                key = service.take();
               
                // Dequeueing events
                Kind<?> kind = null;
                for(WatchEvent<?> watchEvent : key.pollEvents()) {
                    // Get the type of the event
                    kind = watchEvent.kind();
                    if (OVERFLOW == kind) {
                        continue; //loop
                    } else if (ENTRY_CREATE == kind) {
                        // A new Path was created
                        Path newPath = ((WatchEvent<Path>) watchEvent).context();
                        // Output
                        System.out.println("New path created: " + newPath);
                    }
                }
               
                if(!key.reset()) {
                    break; //loop
                }
            }
           
        } catch(IOException ioe) {
            ioe.printStackTrace();
        } catch(InterruptedException ie) {
            ie.printStackTrace();
        }
       
    }

    public static void main(String[] args) throws IOException,
            InterruptedException {
        // Folder we are going to watch
        Path folder = Paths.get(System.getProperty("user.home"));
        watchDirectoryPath(folder);
    }
}
 

beta20

Top Contributor
Habe es auch mal ENTRY_MODIFY gemacht.
Das Problem ist, dass mein Programm selbst nicht den Prozess für das erstellen / kopieren in den Ordner macht, sondern das wiederum von einem anderen Programm kommt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Java Mail Timeout erst nach rund 5 Minuten? Java Basics - Anfänger-Themen 9
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
M Java GUI label ändert sich erst zum Schluss Java Basics - Anfänger-Themen 4
J Input/Output Den zweiten Output erst nach Eingabe ausgeben Java Basics - Anfänger-Themen 4
S OOP Button erst nach 2x klicken deaktivieren Java Basics - Anfänger-Themen 4
P Weiter erst bei Drücken de Enter-TAste Java Basics - Anfänger-Themen 1
W Es wird erst gezeichnet, wenn ich das Fenster vergrößere? Java Basics - Anfänger-Themen 20
I Zähler, der erst wieder zählt nachdem Pixel wieder andere Farbe hat Java Basics - Anfänger-Themen 2
Clarence Weinberg Eclipse: Package wird erst nach Neustart aktuallisiert Java Basics - Anfänger-Themen 1
A Dialog schließt erst nach 2x Klicken auf Schließen Java Basics - Anfänger-Themen 2
T Erste Schritte Elemente finden, deren Name erst "zusammengesetzt" wird Java Basics - Anfänger-Themen 8
R Text Pane Aktualisierung erst nach JOptionPane Java Basics - Anfänger-Themen 10
M globales Array erst mittem im Programm erstellen Java Basics - Anfänger-Themen 14
R Variablen Datentyp erst während Laufzeit festlegen Java Basics - Anfänger-Themen 6
B Erst lesen: Automatisch Texteingabe bestätigen Java Basics - Anfänger-Themen 6
S Inhalt von JPanel erst nach Resize sichtbar Java Basics - Anfänger-Themen 2
S JButton erscheint erst bei Mouseover Java Basics - Anfänger-Themen 10
M Tabelle aktualisiert sich erst nach mausklick Java Basics - Anfänger-Themen 4
E Methode erst nach 20 Sekunden ausführen? Java Basics - Anfänger-Themen 4
A JLabel erst auf null dann auf einen Wert setzen Java Basics - Anfänger-Themen 7
I Befehl wird erst nach dem Ausführen einer Funktion ausgeführt Java Basics - Anfänger-Themen 4
I Funktion erst starten nachdem eine komplett fertig ist Java Basics - Anfänger-Themen 4
M Buttons erscheinen erst bei Mouse-Over Java Basics - Anfänger-Themen 8
C Prozess wird erst bei Beendigung des Programms ausgeführt Java Basics - Anfänger-Themen 2
V JFrame erst sichtbar machen wenns geladen ist Java Basics - Anfänger-Themen 8
Weiti Anzeige von komponenten erst bei Mouse-Over Java Basics - Anfänger-Themen 3
G Objekte von Klassen die erst zur Laufzeit bekannt sind erstellen Java Basics - Anfänger-Themen 6
B Hilfe: Tastatureingaben werden erst nach der Maus angenommen Java Basics - Anfänger-Themen 3
S Teil derGUI zeigt sich erst später Java Basics - Anfänger-Themen 2
C was mach ich erst wenn die programme richtig schwer werden? Java Basics - Anfänger-Themen 2
V Buffered Reader, erst ab bestimmter Zeile auslesen? Java Basics - Anfänger-Themen 8
A JButton erscheint erst bei mouse over Java Basics - Anfänger-Themen 3
A components im JFrame erst nach Größenänderung sichtbar? Java Basics - Anfänger-Themen 2
P Eclipse "aufraeumen", iText-Lizenz, Exe-Datei erst Java Basics - Anfänger-Themen 7
P Menüeinträge erst "über Umwege" sichtbar? Java Basics - Anfänger-Themen 2
K jScrollbar erst nach klicken sichtbar Oo Java Basics - Anfänger-Themen 2
K ResultSet öffnet sich garnicht erst Java Basics - Anfänger-Themen 9
P Lauflicht erst durch Mausklick starten Java Basics - Anfänger-Themen 26
J Habe gerade erst mit Java begonnen - Frage zu JTabbedPane Java Basics - Anfänger-Themen 3
S welcher Konstructor zu erst bei Vererbung Java Basics - Anfänger-Themen 3
C Erst weiter machen wenn fertig Java Basics - Anfänger-Themen 3
I Erst repaint() dann zeichnen? Java Basics - Anfänger-Themen 6
Q Code erst weiterführen, wenn ChildFrame geschlossen wurde Java Basics - Anfänger-Themen 10
DEvent anfängerfrage: wieso layout erst beim verändern? Java Basics - Anfänger-Themen 6
B Wildfly / Applikationsserver Rückmeldung ob hochgefahren Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben