【问题标题】:How can I get path of resource under WEB-INF/class folder (java ee web dynamic project)如何获取 WEB-INF/class 文件夹下的资源路径(java ee web 动态项目)
【发布时间】:2013-08-11 23:51:02
【问题描述】:

我在 Eclipse 中开发 web 动态项目。一个名为“users.txt”的文件位于类文件夹(WEB-INF/classes/users.txt)下。

如何在类(基类,而不是 servlet 类)中获取此文件的相对路径?我将使用该路径附加几行文本。

Christian,这是用于阅读的代码。问题是我不知道如何在具有相对路径的同一文件中创建用于写入(输出)的对象。

public Products(){
    try{
        InputStream in = getClass().getClassLoader().getResourceAsStream("products.txt");    
        BufferedReader br = new BufferedReader(new InputStreamReader(in));

        readProducts(br);
        in.close();
            br.close();


    }catch(Exception e){
        System.out.println("File doesn't exists");
    }
    }

    public void readProducts(BufferedReader in) throws NumberFormatException, IOException{

        String id="";
        String name="";
        double price=0;

        StringTokenizer st;
        String line;

        while((line=in.readLine())!=null){
            st=new StringTokenizer(line,";");
            while(st.hasMoreTokens()){
                id=st.nextToken();
                name=st.nextToken();
                price=Double.parseDouble(st.nextToken());           
            }           
            products.put(id,new Product(id,name,price));
        }
    }

【问题讨论】:

  • 您能否发布一些代码,至少您到目前为止尝试过什么?
  • 您正在寻找错误方向的解决方案。您不应该在运行时写入部署文件夹,更不用说部署类路径了。将文件放在部署文件夹外的固定位置。额外的好处是您当前的问题可以通过这种方式立即解决。顺便说一句,通常的做法是使用 SQL 数据库来处理这类东西。

标签: java servlets


【解决方案1】:

一般来说,您不应该依赖于修改您的网络应用程序目录中的文件。

其中一个原因是 servlet 容器没有义务将您的 .war 文件提取到 fs,理论上它可以从内存中运行您的 Web 应用程序。是的,Tomcat 和大多数容器确实解包 .war,但 Java EE 规范中没有任何内容说它们必须这样做。

无论如何,如果您认为值得冒险,您可以使用ServletContext.getRealPath 获取文件在您的 webapp 目录中的位置。

这应该看起来像这样:

  1. 在您的 webapp 根目录下创建一个文件myfile(应该与您的.war 中的WEB-INF 位于同一文件夹中)。
  2. 在您的 servlet(或您可以访问 servlet 上下文的任何地方)中执行类似的操作:

    String filePath = getServletContext().getRealPath("myfile");

请注意,为了使其正常工作,您应该能够通过请求获取文件,例如:http://<host>:<port>/<contextPath>/myfile(有关详细信息,请参阅方法文档)

【讨论】:

    最近更新 更多