getResourceAsStream的教训

  最近在搞关于lucene的毕设,找到了一个开源的语言分析器IK_CAnalyzer,这是一个基于词库检索的语言分析器,这种语言分析器要比一般二元分析器的切词效果更加理想,欣喜的下载了源码,开始打造用我自己定义的字典的语言分析器。 在辗转的过程中,我体会到了getResourceAsStream的妙处,也托它的福,让我重重的摔了一跤,使得我花了3天的时间停滞不前。
  在JDK中,getResourceAsStream是这样定义的:查找具有给定名称的资源。查找与给定类相关的资源的规则是通过定义类的 class loader 实现的。
  因为我是用txt文件当作字典,它存在一个叫dict.aspactword的包下,这样一来,编译后的文件会储存在classPath下,而不是在src下,在动态向字典添加词的时候,classPath下的txt字典没有改变,相对在getResourceAsStream的时候,拿到的自然不是最新的字典,由此感叹,在classPath下如果有不需要改变的文件,在读取时用getResourceAsStream可以保持系统良好的统一性和可移植性,但是在需要改变它们的时候,一定注意修改的路径是classPath下的文件,否则就直接用文件系统的位置来维护你所需要的文件吧

你可能感兴趣的:(jdk,Lucene)