应用程序根目录中的相对路径 - Java Web 应用程序
Relative path to a directory in application root - Java Web Application
我正在努力获取我放置在 Web 根文件夹中的 fileroot
目录的相对路径。我正在尝试通过 Web Service
从 class 到 return 访问此目录中的文件名。该文件夹包含图像和 XML 个文件。
这是我从展开的 .WAR
文件中看到的项目结构 -
我的项目
- 文件根
- css
- ...
- WEB-INF
|--classes
当我在本地驱动器上使用硬编码的绝对路径来读取目录中的文件时,我能够使它工作。但是,我需要它在不可能使用绝对路径的 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;
}
}
我得到一个 null pointer exception
作为 f.listFiles(directoryFilter)
returns null
因为我怀疑路径有问题。
问题 1,如何获取 class 文件中的应用程序根路径?
问题 2,将目录放在应用程序根目录中是否正确?或者我应该把它放在驱动器的另一个位置吗?
P.S:我之前写了一个 web 应用程序,它读取存储在 class 路径中的 .properties
文件,类似于 this question。但是,这对于大量文件来说似乎不是一个好主意
在应用程序服务器上,默认路径是启动服务器的路径(即启动服务器时所在的文件夹)或 bin
文件夹。所以目录和文件应该在里面。检查您所在路径的快速方法是打印或记录 f.getAbsolutePath()
的结果,这将告诉您服务器默认到哪个文件夹。
您正常打开文件 (new File(...)
) 而不是作为资源,因此未使用资源路径或 class 路径。
在处理应用程序服务器时,最好避免使用默认路径,因为它很容易更改。要么有一个系统 属性 或定义文件搜索位置的等效系统,或者,如果您要发送要与应用程序一起阅读的文件,请将其放入 WAR 并打开它作为资源:
YourClass.class.getResourceAsStream("/...");
或
YourClass.class.getResource("/...");
我正在努力获取我放置在 Web 根文件夹中的 fileroot
目录的相对路径。我正在尝试通过 Web Service
从 class 到 return 访问此目录中的文件名。该文件夹包含图像和 XML 个文件。
这是我从展开的 .WAR
文件中看到的项目结构 -
我的项目
- 文件根
- css
- ...
- WEB-INF
|--classes
当我在本地驱动器上使用硬编码的绝对路径来读取目录中的文件时,我能够使它工作。但是,我需要它在不可能使用绝对路径的 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;
}
}
我得到一个 null pointer exception
作为 f.listFiles(directoryFilter)
returns null
因为我怀疑路径有问题。
问题 1,如何获取 class 文件中的应用程序根路径?
问题 2,将目录放在应用程序根目录中是否正确?或者我应该把它放在驱动器的另一个位置吗?
P.S:我之前写了一个 web 应用程序,它读取存储在 class 路径中的 .properties
文件,类似于 this question。但是,这对于大量文件来说似乎不是一个好主意
在应用程序服务器上,默认路径是启动服务器的路径(即启动服务器时所在的文件夹)或 bin
文件夹。所以目录和文件应该在里面。检查您所在路径的快速方法是打印或记录 f.getAbsolutePath()
的结果,这将告诉您服务器默认到哪个文件夹。
您正常打开文件 (new File(...)
) 而不是作为资源,因此未使用资源路径或 class 路径。
在处理应用程序服务器时,最好避免使用默认路径,因为它很容易更改。要么有一个系统 属性 或定义文件搜索位置的等效系统,或者,如果您要发送要与应用程序一起阅读的文件,请将其放入 WAR 并打开它作为资源:
YourClass.class.getResourceAsStream("/...");
或
YourClass.class.getResource("/...");