【问题标题】:Relative path to a directory in application root - Java Web Application应用程序根目录的相对路径 - Java Web 应用程序
【发布时间】:2015-06-23 12:11:12
【问题描述】:

我正在努力获取我放在 web 根文件夹中的 fileroot 目录的相对路径。我正在尝试从一个类访问这个目录,以通过Web Service 返回其中的文件名。该文件夹包含图像和 XML 文件。

这是从分解的.WAR 文件中看到的我的项目结构-

我的项目
- 文件根目录
-CSS
- ...
- WEB-INF
|--类

当我在本地驱动器上使用硬编码的绝对路径来读取目录上的文件时,我可以让它工作。但是,我需要它在无法使用绝对路径的 Web 服务器上工作。

我需要从我的班级中访问此文件夹,以便能够对 XML 应用一些处理,同时能够从该文件夹中为网页提供图像。

这是为读取目录而编写的代码 -

package com.xyz.executor;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;

/**
 *
 * @author AJ
 */
public class GetDirectories {

    public String basePath = "/fileroot";
    public String directoryName;

    public GetDirectories() {
    }

    public GetDirectories(String DirectoryName) {
        this.directoryName = DirectoryName;

        basePath = basePath + "/" + directoryName;
    }

    public ArrayList<String> read() {
        ArrayList<String> DirectoryList = new ArrayList<>();

        try {
            File f = new File(basePath); // current directory

            FileFilter directoryFilter = new FileFilter() {
                public boolean accept(File file) {
                    return file.isDirectory();
                }
            };

            File[] files = f.listFiles(directoryFilter);
            for (File file : files) {
                if (file.isDirectory()) {
                    System.out.print("directory:");
                    DirectoryList.add(file.getName());
                } else {
                    System.out.print("     file:");
                }
                System.out.println(file.getName());
            }
        } catch (Exception e) {
            System.out.println("Exception occurred (GetDirectories) : " + e.toString());
            e.printStackTrace();
            System.out.println("**************************");
        }
        return DirectoryList;
    }
}

我得到一个null pointer exception,因为f.listFiles(directoryFilter) 返回null,因此我怀疑路径存在问题。

问题 1,如何在类文件中获取应用程序根路径?
问题 2,将目录放在应用程序根目录中是否正确?或者我应该把它放在驱动器上的另一个位置?

P.S:我之前编写了一个 Web 应用程序,它读取存储在类似于 this question 的类路径中的 .properties 文件。但是,对于大量文件来说,这似乎不是一个好主意

【问题讨论】:

  • 您是否尝试将文件夹添加到类路径?对于 Web 应用程序,所有相关的可访问文件都从 Web 应用程序上下文的根目录开始。
  • 你尝试过 context.getRealPath() 吗?
  • docs.oracle.com/javaee/6/api/javax/servlet/… - 但您必须实现Servlet,并将此信息作为参数传递给您的类。 IE。它不能从 POJO 中访问。
  • @JozefChocholacek 我实现了一个Servlet,将我的fileroot 目录移动到WEB-INF,然后使用ServletContext 访问该文件。我将编辑我的问题并添加代码。

标签: java tomcat file-io web-applications


【解决方案1】:

在应用程序服务器上,默认路径是启动服务器的路径(即启动服务器时所在的文件夹)或 bin 文件夹。所以目录和文件应该在里面。检查您所在路径的快速方法是打印或记录f.getAbsolutePath() 的结果,这将告诉您服务器默认的文件夹。

您正在正常打开文件 (new File(...)),而不是作为资源打开,因此不使用资源路径或类路径。

在处理应用程序服务器时,最好避免使用默认路径,因为它很容易更改。要么有一个系统属性或等效的定义文件将在哪里搜索,或者,如果您要与应用程序一起发送要读取的文件,请将其放在 WAR 中并将其作为资源打开:

YourClass.class.getResourceAsStream("/...");

YourClass.class.getResource("/...");

【讨论】:

  • 我使用Servlet 解决了我的问题,然后使用ServletContext 获取资源的URL。我将在问题的编辑中发布我的代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 2016-08-30
相关资源
最近更新 更多