1

我在 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));
        }
    }
4

1 回答 1

2

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

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

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

这应该看起来像这样:

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

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

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

于 2013-08-10T15:18:21.103 回答