关于java读取配置文件的一个问题
我的web应用程序需要读取一个配置文件,有很多行初始化的数据.InputStream is =Thread.currentThread().getContextClassLoader().getResourceAsStream("book.csv");
List ls=getData(is);但是当我每次修改book.csv里面的属性时,需要重启才能读到修改后的值,
这个getContextClassLoader().getResourceAsStream是放在内存的嘛?
如何能够修改book.csv不重启就能读到,
如何清除这些放内存的东西,
谢谢....

解决方案 »

  1.   

    如果这个文件与当前类的文件放在同一个包下的话,我原来是这样做的:<这个类的类名>.class.getResourceAsStream("book.cvs");
      

  2.   

    学习。。
    查了下api才知道getResourceAsStream可以返回一个输入流。 不过直接用IO里的FileInputStream不就行了么 用那么长的getResourceAsStream有啥好处啊
      

  3.   

    在web工程里FileInputStream有时候会找不到文件
      

  4.   

    Web 工程使用的是虚拟目录,无论你使用相对路径还是绝对路径 FileInputStream 都有可能找不到的。一般就采用 getResourceAsStream 来获得流。
      

  5.   

    去配置文件有的时候是一个很棘手的问题,特别是上面几位兄台提到的web开发中。
    用classloader()就可以免去好多的找不到文件的麻烦。
    因为类加载器会在同一个加载点上开始查找配置文件。
    如果你的配置文件在包
    demo.config下面,文件是config.properties的话
    那么你的流就可以直接使用getResourceAsStream("//demo//config//config.properties"),就可以了。
    如果你直接使用FileInputStream的话,你的文件路径就不好定义。当然,不是不能实现,是会很麻烦。
      

  6.   

    在web应用中的当前路径好像是web server启动的目录,我不知道是不是都这样,我试过在web程序中输出一个文件,在Tomcat中,结果那个文件被写到%TOMCAT_HOME%\bin\下面了最好还是不要在web应用中写本地路径
      

  7.   

    谢谢各位,不过大家没有我问的,确实是读在缓存中,
    修改属性后只能重启,
    没有办法,这样不用重启可以读取修改后的属性文件
    我用另外一个办法解决的,传输一个文件名
    public static List getData(String filename) {
    List ret = new ArrayList(); 
    try{
           FileReader fr = null;
           fr = new FileReader(filename);
           BufferedReader br=new BufferedReader(fr);
           String line = null;        
           while( (line = br.readLine())!=null ){
    //         System.out.println("line:"+line);
    ret.add(line);
           }
           br.close();
           fr.close();        
           }catch(IOException e1){
               e1.printStackTrace();
           }
    return ret;
    }