我建的某一个java project的目录结构如下HttpTimerTask
  --src
    --HttpTimerTask.java
    --config.properties访问代码是
HttpTimerTask.class.getClassLoader().getResourceAsStream("config.properties")如果我要改变目录结构成:把配置文件改成src同级别HttpTimerTask
  --src
    --HttpTimerTask.java
  --config.properties然后怎么去修改访问代码呢,各位大侠,多多指教

解决方案 »

  1.   

    上面的结构被过滤变形了,开始是
    HttpTimerTask
    ----src
    --------HttpTimerTask.java
    --------config.properties想变成
    HttpTimerTask
    ----src
    --------HttpTimerTask.java
    ----config.properties改成这样后,如何修改访问下面这个配置文件的代码
      

  2.   

    如果src是java 源文件目录,那你将文件放到src外面,则编译器不会将此文件编译到对应的bin目录(web项目是classes目录)下面,如果你打包或部署还会有这个文件吗
      

  3.   

    意思就是通过打包后不需要这个文件,只是把打包的jar文件同配置文件放一个目录即成,已经解决了,依然谢谢关注,解决办法如下:String userDir = System.getProperty("user.dir");
    String path = userDir + File.separator + "config.properties";
    File file = new File(path);
    FileInputStream fis = new FileInputStream(file);
    props.load(fis);
      

  4.   

    但如果要從jar包內讀取資源的話,仍舊需要getResource的HttpTimerTask.class.getClassLoader().getResourceAsStream("config.properties")
    像這種是按相對路徑的方式在class loader的搜索範圍內進行搜索
    嘗試這樣
    "../config.properties"
    或者某種絕對路徑的方式比如:
    "/com/mindprod/mypackage/mystuff.ser" 
      

  5.   

    资源在ClassPath上层目录直接通过默认的getResource可能是不行的看了ClassLoader源码:
    public URL getResource(String name) {
    URL url;
    if (parent != null) {
        url = parent.getResource(name);
    } else {
        url = getBootstrapResource(name);
    }
    if (url == null) {
        url = findResource(name);
    }
    return url;
    }如果一定要通过getResource方式的话,可能可以通过自建ClassLoader并覆写findResource方法来实现(没实际测试过)
    InputStream is = CustomClassLoader.class.getResourceAsStream("AbsolutePath/user.dir");