有一个web应用需要读入xml文件,用的是java.io.File(),参数一定要是绝对路径吗?
如果我想用相对路径可以吗?怎么可以获得应用的根目录?前面听一个高人说起相对路径是相对于被调用程序的根目录,我用的是tomcat,试了下把xml文件放在tomcat/bin下面是可以的,可是这样同样不能解决问题啊~~可以说更糟了!!那位高手知道这个问题啊,急~~
在线等

解决方案 »

  1.   

    当然可以相对路径简单做法是在web.xml里面定义一个变量,随便你相对绝对..
      

  2.   

    在web.xml怎么写呢?能不能具体告诉一下
      

  3.   

    在应用中不建议写相对路径!
    作为相对路径,不管tomcat的安装路径为何,
    只要把应用放到它的应用目录下边,就可以了!
    但是你如果用绝对路径,这将会很麻烦,对于不同的服务器,你都得
    重新设置路径!
    很不方便!
      

  4.   

    InputStream in = getClass().getResourceAsStream(fileName);
    看一下。
      

  5.   

    z3h(zhaohonghui) 的方法是可行的,不过文件要放在classpath下,
    不过有一种变通的方法:
    public class FilesUtil{    private static String strSep = File.separator;
        private static String webRoot="";
        static{
         String className = "org.apache.commons.dbcp.BasicDataSource";
         String classNameUrl="/org/apache/commons/dbcp/BasicDataSource.class";
         String temp=null;
            int i = 0;
            try {
             Class.forName(className);        
                java.net.URL classUrl = FilesUtil.class
                        .getResource(classNameUrl);
                temp = classUrl.getPath();
                temp = URLDecoder.decode(temp);
                //如果是windows则从第六个字符开始,否则从第五个字符开始
                if ("Win".equalsIgnoreCase(System.getProperty("os.name").substring(
                        0, 3))) {
                    i = 6;
                } else {
                    i = 5;
                }
                webRoot = temp.substring(i, temp.indexOf("WEB-INF") - 1);
            } catch (Exception e) {
             System.err.println("取得webRoot时出错:");
             webRoot = "";
            }
        }
    /**
     * 取到目录为webRoot
     * 
     * @return
     */
    public static String getWebRoot(){
    return webRoot;
    }
    }org.apache.commons.dbcp.BasicDataSource是一个dbcp.jar里的一个类
    将这个jar放在web-inf/lib下就行了,当然你也可以换一个另外的jar到此目录下
      

  6.   

    IO操作路径和JSP、SERVLET路径是不同的,在IO操作中“/”代表你的根盘路径而JSP、SERVLET中代表你应用程序的根路径。
    例子:在比如你的应用程序放在c:/myweb/下面,其中一个BEAN要访问myweb下的一个文件a.txt,如果你用java.io.File(“/a.txt”)就错误的,这样访问的是c:/a.txt,但是在JSP、SERVLET中include“/a.txt”则是正确的。
      

  7.   

    读什么配制?VILOCITY还是HIBERNATE?
      

  8.   

    为了 移植性 赞成尽量使用 相对路径 而不是 绝对路径
    使用相对路径的问题就是理解根目录“/”所在
    而理解根目录“/”的关键在于你必须明确知道代码是在什么容器里面运行的
    举例来说:java application在本地JVM运行,参照本地文件系统,它的“/”就是App程序的根目录servlet和jsp在WEB容器里面运行,参照服务器文件系统,“/”是服务器web根目录,这个根目录并不统一,比如tomcat默认webapps,resin默认doc等等,通过修改配置,可以指定到服务器任何路径下,不管指定到哪个物理路径,根目录“/”应该是war包所在目录java bean比较特殊,它们可能有双重标准,一般应该在web-inf/classes下找它的相对路径
      

  9.   

    <%
    out.println("URL of thisPage : "+ getServletContext().getResource("/images/logo.gif"));
    %>
    <%
    out.println("URL of thisPage : "+ getServletContext().getResource("/WEB-INF/web.xml"));
    %>
      

  10.   

    <%
    out.println("InputStream of thisPage : "+ getServletContext().getResourceAsStream("/images/logo.gif"));
    %>
    <%
    out.println("InputStream of thisPage : "+ getServletContext().getResourceAsStream("/WEB-INF/web.xml"));
    %>
      

  11.   

    接分:
    如果你用ibatis 
    这个包里com.ibatis.common.resources.Resources;提供Resources.getResourceAsReader静态方法:String resource="文件的相对路径";
    Reader reader;
    reader=Resources.getResourceAsReader(resource);