3

そのため、サーバーが起動してフォルダーに追加されたファイルを取得するときにwatchServiceを実行する必要があるため、Context Listenerを使用することにしました。これが私がやろうとしていることのサンプルコードです。明らかに機能していませんが、必要なものを要約しています:

@WebListener
public class StartupClass implements ServletContextListener{

    @Override
    public void contextInitialized(ServletContextEvent eve){

        try {
            Path Folder = Paths.get("C:/Users/User/Desktop/Test");
            WatchService watchService = FileSystems.getDefault().newWatchService();
            WatchKey key = Folder.register(watchService,StandardWatchEventKinds.ENTRY_CREATE);

            boolean valid = true;

            do {
                WatchKey watchKey = watchService.take();

                for (WatchEvent<?> event : watchKey.pollEvents()) {
                    WatchEvent.Kind kind = event.kind();
                    if (StandardWatchEventKinds.ENTRY_CREATE.equals(event.kind())) {
                        String fileName = event.context().toString();
                    }
                }
                valid = watchKey.reset();

            } while (valid);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    @Override
    public void contextDestroyed(ServletContextEvent event){
    }
}

ご覧のとおり、無限ループ「 while(valid 」により、アプリが正しくデプロイされないため、テストすることさえできません。

これを適切に解決する方法について、提案とアドバイスが必要です。ありがとう

4

0 に答える 0