为什么在访问Tomcat上的文件时使用空指针(使用HttpServlet)?

时间:2017-10-11 19:38:35

标签: java jsp tomcat

我正在尝试从JSP项目的根目录中获取文件夹列表,然后将其显示给表中的用户,其中包含指向子文件夹的链接和文件夹的大小。下面的代码是获取WebContent文件夹中的目录列表。

String absolutePath = this.getServletContext().getRealPath("/") + relativePath;
String fileList = "<tr><th>File Name</th><th>Size [B]</th><th>Last Updated</th></tr>";

File folder = new File(absolutePath);
File[] listOfFiles = folder.listFiles();

for (int i = 0; i < listOfFiles.length; i++) {
    if (listOfFiles[i].isDirectory()) {
        Path file = listOfFiles[i].toPath();
        BasicFileAttributes attr = Files.readAttributes(file, BasicFileAttributes.class);

        String time = attr.lastAccessTime().toString();

        fileList += "<tr><td><img width='15px' alt='**' src='assets\\images\\folder.png'/>&nbsp;"
            + "<button onclick='navigate(this);'>" + listOfFiles[i].getName() + "</button></td><td>" + attr.size() + "</td><td>" 
            + time.replace("T", " ").substring(0, time.indexOf(".")) 
            + "</td></tr>";
    }
}

当我在本地运行项目时,没有问题。但是在服务器上部署我的.war文件后,在运行时我得到一个500错误(空指针异常)在行:

for (int i = 0; i < listOfFiles.length; i++)

这告诉我文件夹数组尚未使用子文件夹进行初始化。

我假设我在服务器上对这些文件夹的访问权限与在本地运行时的访问权限相同。

有关如何访问这些文件夹的任何想法? 附:服务器在Unix上运行。

2 个答案:

答案 0 :(得分:1)

来自https://docs.oracle.com/javase/8/docs/api/java/io/File.html#listFiles--

  

返回:

     

表示文件和的抽象路径名数组   此抽象路径名表示的目录中的目录。该   如果目录为空,则数组将为空。 如果是这样,则返回null   abstract pathname不表示目录,或者表示I / O错误   发生。

答案 1 :(得分:1)

首先是一个小错误:

src='assets\\images\\folder.png'

应该是

src='assets/images/folder.png'

然后File.listFiles在某些情况下可以返回null。

文件名必须区分大小写,路径/ 分隔。 看到第一个小错误,这可能就是这种情况。

如果在战争中部署文件,则必须配置TomCat以解压缩war zip。轻松检查。

如果您上传文件,那么文件夹和文件权限必须正常。