【问题标题】:How to get list of files/directories of an directory URL?如何获取目录 URL 的文件/目录列表?
【发布时间】:2012-07-19 13:11:35
【问题描述】:

假设我有一个 URL:http://java.sun.com/j2se/1.5/pdf 我想获取pdf 目录下所有文件/目录的列表。

我正在使用 Java 5。

我可以用这个程序http://www.httrack.com/得到目录列表,但是用Java我不知道是否可以。

有没有人知道如何在 Java 中获得它?或者如果 Java 不能,这个程序怎么能完成这项工作?

【问题讨论】:

  • 你知道你会发出什么样的HTTP请求来获取它们吗?你知道目标HTTP服务器是否甚至支持目录列表?
  • 我没有太多关于服务器和 HTTP 请求的信息,我唯一拥有的就是上面提到的 URL。

标签: java url


【解决方案1】:

有一些条件:

  1. 服务器必须启用目录列表才能看到它的内容。
  2. 我不知道(没有 API 或 HTTP 动词)来检索列表,因此列表通常显示为普通的 HTML 页面
  3. 您必须解析此 HTML 页面才能找到条目。

使用 JSoup 之类的库可以轻松完成解析。

例如,使用 JSoup,您可以像这样在 url 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 这是一个找不到的页面,所以我认为您不走运。

【讨论】:

  • 我可以通过这个程序httrack.com 获取目录列表。我认为也必须有一种方法可以用 java 来做到这一点
【解决方案2】:

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

如果 URL 是针对 http: 协议的,那么就没有文件目录的概念,你根本无法做你想做的事。您将不得不退后一步,看看您要满足的更高级别的要求。

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

如果您只能通过 HTTP 访问来呈现页面,那么:
使用 HTML 页面并对其进行解析,给出目录列表以获取文件列表,并使用正则表达式呈现文件名。

【讨论】:

    猜你喜欢
    • 2020-09-11
    • 2012-08-07
    • 2013-02-02
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 2012-09-22
    • 2019-11-08
    相关资源
    最近更新 更多