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

时间:2015-06-23 12:11:12

标签: java tomcat file-io web-applications

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

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

MyProject的
     - fileroot
     - css
     - ......
     - WEB-INF
    | --classes

当我在本地驱动器上使用硬编码的绝对路径来读取目录上的文件时,我能够使其工作。但是,我需要这个工作在无法使用绝对路径的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 exceptionf.listFiles(directoryFilter)返回null因为我怀疑该路径存在问题。

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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