java - 应用程序根目录中的相对路径 - Java Web 应用程序

标签 java tomcat file-io web-applications

我正在努力获取我放置在 Web 根文件夹中的 fileroot 目录的相对路径。我试图从类访问此目录以通过 Web 服务 返回其中的文件名。该文件夹包含图像和 XML 文件。

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

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

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

我需要从我的类(class)中访问这个文件夹,以便能够对 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;
    }
}

f.listFiles(directoryFilter) 返回 null 时,我得到了一个空指针异常,因此我怀疑路径。

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

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

最佳答案

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

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

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

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

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

关于java - 应用程序根目录中的相对路径 - Java Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31002470/

相关文章:

java - 从 Web 服务中的 sun-web.xml 获取上下文根

java - file.nextInt 退出我的嵌套 for 循环

C - 从文件读取时光标 'interpret' 如何出现空格?

java - 当 NumberFormatException 时如何使用有问题的输入字符串打印自定义消息

java - 当收到 "Unable to read repository"ProvisionException 错误时,如何连接到 Eclipse 中的更新站点?

java - JAXB 编码,忽略 nillable

rest - 带有 Netbeans 的 Tomcat restful Web 服务数据库 (JPA) 无法工作

tomcat 可扩展性 ejb

tomcat - EntityManager 注入(inject)不适用于 Tomcat + OpenEJB

python - 是否可以就地修改文件中的行?