Existenz eines Files max 30 sec prüfen

blondi

Mitglied
Hallo,

ich habe ein Servlet, in dem ich u.a. prüfen muss ob ein File existiert. Das File ist der Rückgabwert eines Filetransfers.

while (!file.exists()) {
// Solange das File nicht da ist bleibt das Programm in der Whileschleife
}


Vielleicht kommt das File ja nie; d.h. nach spätestens 30 sec möchte ich abbrechen. Wie mache ich das möglichst elegant?

Für einen Tip wäre ich sehr dankbar
 
Speicher dir vor der Schleife die aktuelle Zeit (in Millisekunden). In der Schleife überprüfst du ob das File existiert, wenn nicht legst du deinen Thread für 1 Sekunde schlafen, danach überprüfst du ob die 30 Sekunden schon vorbei sind.
Wenn ja Schleife abbrechen ansonsten einfach weiterlaufen lassen.
 
Wie oft tritt der Fall auf und wie wichtig ist eine sofortige Bearbeitung? Wenn beides unwichtig ist, reicht ein if aus und man prüft nach 30 Sekunden zum zweiten Mal die Existenz.

Elegant macht man das mit Callbacks.
 
Danke für die Antwort!

Der Fall tritt pro Anforderung einmal auf, aber die Bearbeitung ist wichtig und muss korrekt sein und eben auch wie mans eben richtig macht. Ich will ja was lernen. Die obige Lösung fühlt sich so altmodisch an. Wie macht man s mit callback. Vielleicht kleine Hilfestellung? Danke schon mal.
 
Callbacks funktioniert nur bei einer Zweiwegkommunikation. Im folgenden Beispiel wird die Klasse FileTransfer 3x ausgeführt. Die Verarbeitung dauert 0-2 Sekunden. Sobald die Verarbeitung abgeschlossen ist, wird die CallBack-Methode aufgerufen.

Java:
import java.util.Random;

public class Module implements FileTransferCallback {
	public static void main(String[] args) {
		Module module = new Module();

		for (int i = 0; i < 3; i++) {
			new FileTransfer(module, i);
		}
	}

	@Override
	public void doSomething(String message) {
		System.out.println(message);
	}
}

class FileTransfer {
	public FileTransfer(FileTransferCallback callback, final int id) {
		new Thread() {
			public void run() {
				try {
					Thread.sleep(new Random().nextInt(2000));
                                        // createFile
					callback.doSomething("FileTransfer " + id + " is done.");
				} catch (Exception ex) {}
			};
		}.start();
	}
}

interface FileTransferCallback {
	void doSomething(String message);
}
 
Hi Danke,

aber das kann ich nicht nehmen.
Ich leg mein File in ein Verzeichnis und von dort wird das File verschoben Art Auftragsverwaltung. Klappt das wird eine File generiert und in mein Verzeichnis geschrieben. Auf dieses muss ich warten. Existiert dies dann bekommt die Anwendung ein ok. Mein Programm muss solange warten bis dieses ok File kommt.

Danke
 

Zurück
Oben