我一直在做以下项目,一些背景:
我是一名实习生,目前正在为我的组织开发一个新的search系统。 目前的设置是微软SharePoint 2013用户上传文件等。另一方面是我正在开发的系统索引所有数据上传到Apache SOLR。
我已经成功地将SharePoint内容存储库映射到networking驱动器,我可以手动启动我的程序,使用Solrj api开始将此networking驱动器的内容索引到SOLR。
然而,我面对的问题是我无法从这个networking驱动器轮询事件。 在我本地运行的testing版本中,我使用了一个观察器服务来启动文件创build,文件修改和文件删除的代码(重新索引文档,删除索引)。
这不工作不幸与一个url指向一个networking驱动器:(。
所以最大的问题是 : 是否有任何API /库可用于从networking驱动器轮询事件?
任何帮助将不胜感激!
所以我最后想出了这一个,试图看看.net的观察者服务(system.io.filesystemwatcher)的变种,我有同样的问题。 我终于通过使用java.io.FileAlterationMonitor /观察者得到它的工作。
码:
public class UNCWatcher { // A hardcoded path to a folder you are monitoring . public static final String FOLDER = "A:\\Department"; public static void main(String[] args) throws Exception { // The monitor will perform polling on the folder every 5 seconds final long pollingInterval = 5 * 1000; File folder = new File(FOLDER); if (!folder.exists()) { // Test to see if monitored folder exists throw new RuntimeException("Directory not found: " + FOLDER); } FileAlterationObserver observer = new FileAlterationObserver(folder); FileAlterationMonitor monitor = new FileAlterationMonitor(pollingInterval); FileAlterationlistner listener = new FileAlterationlistnerAdaptor() { // Is triggered when a file is created in the monitored folder @Override public void onFileCreate(File file) { try { // "file" is the reference to the newly created file System.out.println("File created: " + file.getCanonicalPath()); if(file.getName().endsWith(".docx")){ System.out.println("Uploaded resource is of type docx, preparing solr for indexing."); } } catch (IOException e) { e.printStackTrace(System.err); } } // Is triggered when a file is deleted from the monitored folder @Override public void onFileDelete(File file) { try { // "file" is the reference to the removed file System.out.println("File removed: " + file.getCanonicalPath()); // "file" does not exists anymore in the location System.out.println("File still exists in location: " + file.exists()); } catch (IOException e) { e.printStackTrace(System.err); } } }; observer.addlistner(listener); monitor.addObserver(observer); System.out.println("Starting monitor service"); monitor.start(); } }