【发布时间】: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