如何在java中获取目录url的文件/目录列表?

时间:2012-07-19 13:11:36

标签: java url

假设我有一个URL: http://java.sun.com/j2se/1.5/pdf我想获得pdf目录下所有文件/目录的列表。我正在使用java 5。 我可以通过此程序http://www.httrack.com/获取目录列表。但是使用java我不知道是否可能。

是否有人知道如何在java中获取它或者该程序如何完成java无法完成的工作?

2 个答案:

答案 0 :(得分:20)

有一些条件:

  1. 服务器必须启用目录列表才能查看其内容。
  2. 我无法知道(没有API或HTTP动词)来检索列表,因此列表通常显示为普通的HTML页面
  3. 您必须解析此HTML页面才能找到条目。
  4. 使用像JSoup这样的库可以轻松完成解析。

    例如,使用JSoup,您可以像这样在网址http://howto.unixdev.net/获取文档:

    import java.io.IOException;
    
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    
    public class Sample {
        public static void main(String[] args) throws IOException {
            Document doc = Jsoup.connect("http://howto.unixdev.net").get();
            for (Element file : doc.select("td.right td a")) {
                System.out.println(file.attr("href"));
            }
        }
    }
    

    将输出:

    beignets.html
    beignets.pdf
    bsd-pam-ldap.html
    ddns-updates.html
    Debian_on_HP_dv6z.html
    dextop-slackware.html
    dirlist.html
    downloads/
    ldif/
    Linux-SharePoint.html
    rhfc3-apt.html
    rhfc3-apt.tar.bz2
    SUNWdsee-Debian.html
    SUNWdtdte-b69.html
    SUNWdtdte-b69.tar.bz2
    tcshrc.html
    Test_LVM_Trim_Ext4.html
    Tru64-CS20-HOWTO.html
    

    至于你的样本网址http://java.sun.com/j2se/1.5/pdf这是一个找不到的网页,所以我觉得你运气不好。

答案 1 :(得分:5)

如果 URL 用于file:protocol,那么您可以将其转换为java.io.File,然后使用这些方法列出目录。

如果 URL 用于http:协议,则没有文件目录的概念,并且您根本无法做您认为想要做的事情。您将不得不退后一步,看看您正在尝试实现的更高级别的要求。

让您的服务器部署Servlet以从其收到的请求指定的文件夹中检索文件列表。在您的客户端,您的应用程序通过提供您打算列出的路径(虚拟?相对?)向服务器发送请求。 servlet将返回从服务器的OS检索到的请求路径中的文件列表。然后,它将文件列表序列化到客户端端点以进行进一步处理。

如果您只能使用HTTP访问权限呈现页面,那么:
使用HTML页面并解析它,给出目录列表以获取文件列表,并使用正则表达式来生成文件名。