Moin Moin,
ich hab folgendes Problem:
Die Aufgabenstellung vom Chef lautet: Lass dein Programm in den Ordner 1 reinschauen. Wenn dort ein neues File angelegt wird, lass das Programm prüfen, ob dieses File in Ordner 2 vorhanden ist. Wenn ja, sende eine Email an den zuständigen Bearbeiter, wenn nein, tue nichts.
Das ganze habe ich über einen Watcher implementiert und lokal funktioniert es einwandfrei. Die GUI hat keine Probleme bei der Verarbeitung und die Syntax \\\\srv1\\test\\bla wird von mir eingehalten. Aber offenbar kommt Java nicht mit dem Netzwerk klar, denn sobald ich auf Netzwerkordner zugreifen will, reagiert der Watcher kein Stück mehr. Hier der Quelltext dazu:
Hat jemand dazu eine Idee oder einen Hinweis? Unser Administrator meinte, dass es daran liegen könnte, wie Java den UNC Path auslegt o.ä. Berechtigung ist nicht das Problem, der Server sei für schreibenden und lesenden Zugriff auf diese Art völlig frei.
ich hab folgendes Problem:
Die Aufgabenstellung vom Chef lautet: Lass dein Programm in den Ordner 1 reinschauen. Wenn dort ein neues File angelegt wird, lass das Programm prüfen, ob dieses File in Ordner 2 vorhanden ist. Wenn ja, sende eine Email an den zuständigen Bearbeiter, wenn nein, tue nichts.
Das ganze habe ich über einen Watcher implementiert und lokal funktioniert es einwandfrei. Die GUI hat keine Probleme bei der Verarbeitung und die Syntax \\\\srv1\\test\\bla wird von mir eingehalten. Aber offenbar kommt Java nicht mit dem Netzwerk klar, denn sobald ich auf Netzwerkordner zugreifen will, reagiert der Watcher kein Stück mehr. Hier der Quelltext dazu:
Java:
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class NavWatcherMain {
public static void watch(String watchpath, String checkpath, String mail_sender, String mail_receiver) throws IOException, InterruptedException{
WatchService watcher = FileSystems.getDefault().newWatchService();
Paths.get(watchpath).register( watcher, StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_DELETE,
StandardWatchEventKinds.ENTRY_MODIFY );
try {
while ( true ) {
WatchKey key = watcher.take();
for ( WatchEvent<?> event : key.pollEvents() ){
System.out.println( "Kind: " + event.kind() + ", File: " + event.context() );
if(event.kind() == StandardWatchEventKinds.ENTRY_CREATE) {
System.out.println(event.context());
if(dateivorhanden(event.context().toString(), checkpath)){
String file = event.context().toString();
try{
/** Definition des Mailversands
* Absender: Jeweiliger Absender der automatischen Nachricht
* Empfänger: Empfänger und Bearbeiter der Nachricht
* Betreff: Kurze Info
* Nachricht: Genau Nennung des betreffeneden Files
*/
String absender = mail_sender;
String empfaenger = mail_receiver;
String betreff = "Doppelter Import im zzz Ordner";
String inhalt = "Das File \"" + file + "\" wurde doppelt abgelegt!";
Properties props = new Properties();
props.setProperty( "mail.smtp.host", "mail.zzz.de" );
System.out.println("Properties set.");
Session session = Session.getDefaultInstance( props );
Message msg = new MimeMessage( session );
InternetAddress adresseAbsender = new InternetAddress( absender );
msg.setFrom( adresseAbsender );
System.out.println("Absender set.");
InternetAddress addressEmpfaenger = new InternetAddress( empfaenger );
msg.setRecipient( Message.RecipientType.TO, addressEmpfaenger );
System.out.println("Empfänger set.");
msg.setSubject( betreff );
msg.setContent( inhalt, "text/plain" );
Transport.send( msg );
System.out.println("Nachricht versandt.");
}
catch (MessagingException msgex){
String errormessage = "";
String stacktrace = "";
errormessage = msgex.getMessage() + "\n\n";
for (int i=0; i < msgex.getStackTrace().length; i++){
stacktrace += msgex.getStackTrace()[i] + "\n";
}
System.out.println("Error:" + errormessage);
System.out.println("Stacktrace: " + stacktrace);
}
} else {
System.out.println("Neuer Artikel");
}
}
}
key.reset();
}
} catch (Exception ex) {
//Einflicken eines Warnfensters oder Labels!
}
}
public static boolean dateivorhanden(String newfile, String checkpath) throws IOException{
System.out.println("Neues File wird überprüft.");
//Prüft den angegebenen Ordner auf das eingegebene File
//Sollte es bereits existieren, wird eine Mail versandt,
//ansonsten wird nicht auf die Eingabe reagiert.
if (new File(checkpath + "\\" + newfile).exists()){
return true;
}
return false;
}
}
Hat jemand dazu eine Idee oder einen Hinweis? Unser Administrator meinte, dass es daran liegen könnte, wie Java den UNC Path auslegt o.ä. Berechtigung ist nicht das Problem, der Server sei für schreibenden und lesenden Zugriff auf diese Art völlig frei.