如何在WEB-INF / class文件夹下获取资源路径(java ee web dynamic project)

我在Eclipse中开发web动态项目。 一个名为“users.txt”的文件位于classes文件夹(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)); } } 

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

其中一个原因是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://://myfile (有关详细信息,请参阅方法文档)