2

我是 Java EE 的新手,我想在网页中显示 PDF 缩略图列表。这些 PDF 存储在 中的一个文件夹中src/main/webapp/pdf,我想阅读此文件夹以获取所有文件名。这是我的代码:

@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) {
    try {
        res.setContentType("application/json");
        res.setCharacterEncoding("UTF-8");

        PrintWriter out = res.getWriter();
        File pdfFolder = new File("/pdf");

        for (File pdf : pdfFolder.listFiles()) { // Line 27
            out.println(pdf.getName());
        }
    } catch (IOException e) {
        log.log(Level.SEVERE, e.getMessage());
    }
}

当我运行此代码时,我得到NullPointerException

java.lang.NullPointerException
    com.multi.services.ListFiles.doGet(ListFiles.java:27)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

这是我的结构:

结构

我想要的是一个读取 PDF 文件夹并返回包含 PDF 文件名的 JSON 的 Web 服务,我将使用 Ajax 在 JavaScript 中调用此服务。

谁能帮我让我的脚本运行良好?或者有没有人有更好的解决方案?

谢谢 :)

4

2 回答 2

4

来自 Javadoc 的引用File.listFiles()

如果此抽象路径名不表示目录,或者发生 I/O 错误,则返回 null。

所以你的路径不正确(因为你的 servlet 容器的当前目录是未定义的)。您在这里有这些可能性:

  • 使用绝对路径(如果您将 PDF 存储在 webapp 之外,这是合适的)

  • 使用getRealPath()(这应该适合您的用例;PDF 是 webapp 的一部分):

File pdfFolder =
  new File(req.getSession().getServletContext().getRealPath("/pdf"));
于 2013-09-04T15:43:23.740 回答
0

铍,我试过你的建议,效果很好!

为了澄清这个项目,我展示了我的案例:

try { 
    File pdfFolder=new File(request.getSession().getServletContext().getRealPath("img/fotos"));

    System.out.println("PATH---->"+pdfFolder);

    for (File pdf : pdfFolder.listFiles()) { 

        String s = pdf.getName();
        String t = s.substring(0, s.lastIndexOf("."));

        if (t.equals(nombre)) {
            Foto = s;
            break;
        }
    }
} 
catch (IOException e) {
     e.printStackTrace();
}
于 2016-10-09T07:27:00.203 回答