Jakarta ee 使用servlet显示网页中的文件列表

Jakarta ee 使用servlet显示网页中的文件列表,jakarta-ee,tomcat,servlets,Jakarta Ee,Tomcat,Servlets,我是JavaEE新手,我想在网页中显示PDF缩略图列表。这些PDF文件存储在src/main/webapp/PDF中的一个文件夹中,我想阅读此文件夹以获取所有文件名。这是我的密码: @Override public void doGet(HttpServletRequest req, HttpServletResponse res) { try { res.setContentType("application/json"); res.setCharact

我是JavaEE新手,我想在网页中显示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)
以下是我的结构:

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

有人能帮我让我的脚本运行良好吗?还是有更好的解决方案


谢谢:)

来自
File.listFiles()

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

因此,您的路径不正确(因为servlet容器的当前目录未定义)。这里有以下几种可能性:

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

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

文件pdfFolder=
新文件(req.getSession().getServletContext().getRealPath(“/pdf”);

引用自
File.listFiles()的Javadoc

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

因此,您的路径不正确(因为servlet容器的当前目录未定义)。这里有以下几种可能性:

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

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

文件pdfFolder=
新文件(req.getSession().getServletContext().getRealPath(“/pdf”);

贝里利姆,我试过你的建议,效果很好

为了澄清这一点,我展示了我的案例:

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();
}

贝里利姆,我试过你的建议,效果很好

为了澄清这一点,我展示了我的案例:

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();
}