java - 将根文件夹设置为索引

标签 java servlets file-io

我这里有这段代码:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

/**
 *
 * @author Nathan Campos
 */
public class Files extends HttpServlet {
    PrintWriter out = null;              // moved outside doGet() for use in ls()
    @Override
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html");
        // PrintWriter out = response.getWriter(); would create a copy no accessable in ls()
        out = response.getWriter();   // this uses the out declared outside
        File startDir = new File("C:\\test");
        ls(startDir);
    }

    private void ls(File f) {
        File[] list = f.listFiles();
        if ( list == null ) {
            out.println("Returned null");
                    return; // otherwise the for loop will crash
        }
        for(File file : list) {
            if(file.isDirectory()) {
                ls(file);
            } else {
                out.println("<a href='+file.toURL()+'>'+file.getName()+'</a>");
            }
        }
    }
}

但我想让它在文件夹 C:\WorkFiles\ServletFiles 上搜索。我怎样才能做到这一点?

更新:当我尝试使用private void ls(File f)(没有static)时,我在浏览器(运行 Tomcat):

java.lang.NullPointerException
    Files.ls(Files.java:30)
    Files.doGet(Files.java:18)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

最佳答案

应从配置中读取您启动的目录。不过你也可以这样调用它:

PrintWriter out = null; // moved outside doGet() for use in ls()

public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
throws ServletException, IOException {
    response.setContentType("text/html");
    out = response.getWriter();

    File startDir = new File("C:\\WorkFiles\\ServletFiles");
    ls( startDir );
}

ls() 中的打印行有问题(不能混合 ' 和 "),应重写为

out.println("<a href="+file.toURL()+'>'+file.getName()+"</a>");

(假设您不希望在重新渲染的 html 页面中输出而不是标准输出)

注意:已弃用的 file.toURL() 方法会抛出 MalformedURLException

编辑:

由于 listFiles 可能返回 null,因此您还应该添加

File[] list = f.listFiles();
if ( list == null ) return;

关于java - 将根文件夹设置为索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3205664/

相关文章:

java - 如何查找与 NetBeans 捆绑的 Tomcat 版本

java - 解决向double Arraylist添加新值时Java堆空间错误

java - 在 JSON 请求中发送图像

Java字节数组多线程

java - 没有任何注释和xml文件的Spring XD模块

java - 在 java servlet 中嵌入 Apache fop 2.1

java - JLabels 没有显示

java - 使用 isFormField 流/多部分表单从多个选择中获取数组。 Java 小服务程序

android - 如何在带有文件名的 ListView 中显示文件大小

C# File.Open 和 Stream 等效项