Drools 5 загружает файл правил drl из файловой системы

Я разработал собственный редактор правил, способный создавать файлы drl и сохранять их в файловой системе в заданном каталоге. (например, c:\savedRules\rule.drl). Проблема в том, что после сохранения правила мне нужно запустить его с помощью drools engine. В моем классе я пытаюсь загрузить правило следующим образом:

KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); 
kbuilder.add(ResourceFactory.newClassPathResource("c:\savedRules\rule.drl"), ResourceType.DRL);

но это не работает. исключение: «rule.drl не может быть открыт, потому что он не существует», но на самом деле он существует....

Что я делаю неправильно? Есть ли другой способ загрузить правила непосредственно из файловой системы?


person stefano crona    schedule 14.02.2011    source источник
comment
вам нужно избегать этих обратных косых черт kbuilder.add(ResourceFactory.newClassPathResource("c:\\savedRules\\rule.drl"), ResourceType.DRL);   -  person Augusto    schedule 14.02.2011
comment
либо избегайте обратной косой черты (как указал Аугусто), либо используйте File.separator для связи с каталогами и файлами. Кроме того, проверьте, действительно ли ваш файл записан на диск, прежде чем добавлять его в базу знаний.   -  person Lucas de Oliveira    schedule 14.02.2011


Ответы (3)


Попробуйте использовать,

FileInputStream  fis = new FileInputStream(drlFile);
kbuilder.add(ResourceFactory.newInputStreamResource(fis), ResourceType.DRL);

Спасибо.

person Nikunj    schedule 14.02.2011

kbuilder.add(ResourceFactory.newClassPathResource("LoopConditionRules.drl"),ResourceType.DRL);

Просто добавьте эту строку и скопируйте файл drl в папку ресурсов проекта, когда вы запустите его, он автоматически найдет файл из проекта, нет необходимости указывать конкретный путь для вашего файла.

Попробуйте этот способ, может быть, вы получите нужный результат.

person Dhaval Shah    schedule 24.01.2013

Попробуйте приведенный ниже код, это сработает.

kbuilder.add(ResourceFactory.newFileResource(drlFileName), ResourceType.DRL);
person Midhun P    schedule 02.05.2016
comment
Можете ли вы объяснить немного больше? - person Dieter Meemken; 02.05.2016