我正在努力获取我放在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 exception
,f.listFiles(directoryFilter)
返回null
因为我怀疑该路径存在问题。
问题1 ,如何在类文件中获取应用程序根路径?
问题2 ,我是否通过将目录放在应用程序根目录中来做正确的事情?或者我应该把它放在驱动器上的另一个位置?
P.S:我之前写过一个Web应用程序,它读取存储在类路径中的.properties
文件,类似于this question。但是,对于大量文件来说,这似乎不是一个好主意
答案 0 :(得分:2)
在应用程序服务器上,默认路径是服务器启动的路径(即启动服务器时所在的文件夹)或bin
文件夹。所以目录和文件应该在其中。检查您所在路径的快速方法是打印或记录f.getAbsolutePath()
的结果,这将告诉您服务器默认的文件夹。
您正常打开文件(new File(...)
)而不是资源,因此不使用资源路径或类路径。
在处理应用程序服务器时,最好避免使用默认路径,因为它很容易更改。要么具有定义文件搜索位置的系统属性或等效属性,要么在运送要与应用程序一起读取的文件时,将其放在WAR中并将其作为资源打开:
YourClass.class.getResourceAsStream("/...");
或
YourClass.class.getResource("/...");