2012-07-19 82 views
15

假設我有一個URL: http://java.sun.com/j2se/1.5/pdf我想要獲得pdf目錄下所有文件/目錄的列表。我正在使用java 5. 我可以通過此程序獲得dir的列表http://www.httrack.com/。但用java我不知道是否有可能。如何在java中獲取目錄url的文件/目錄列表?

是否有任何機構知道如何在java中獲取它或者該程序如何執行java不能做的工作?

+5

你知道你會做出什麼樣的HTTP請求來獲取它們呢?你知道目標HTTP服務器是否支持目錄列表嗎? – wrschneider 2012-07-19 13:13:03

+0

我有關於服務器和HTTP請求沒有太多的信息,我有什麼的唯一事情就是像上面提到的URL。 – itro 2012-07-20 08:41:11

回答

19

有一些條件:

  1. 服務器必須啓用目錄爲了讓你看到它的內容列表。
  2. 我無法知道(無API或HTTP動詞)來檢索列表,因此列表通常顯示爲普通HTML頁面
  3. 您必須解析此HTML頁面才能找到條目。

解析可以使用像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這是不是發現了一個網頁,所以我覺得你運氣不好。

+0

我可以用此程序http://www.httrack.com/目錄列表。 我認爲一定有辦法用java來做到這一點 – itro 2012-07-20 08:35:10

4

如果URL用於文件:協議,那麼您可以將其轉換爲java.io.File,然後使用這些方法列出目錄。

如果URL用於http:協議,那麼就沒有文件目錄的概念,並且基本上不能做你認爲你想做的事情。您將不得不退後一步,看看您嘗試實現的更高級別的要求。

在您的服務器部署一個Servlet來從它接收到的請求中指定的文件夾中檢索文件的列表。在您的客戶端,您的應用程序通過提供您打算列出的路徑(虛擬?相對?)向服務器發送請求。 servlet將返回從服務器操作系統檢索到的請求路徑中的文件列表。然後,它將文件列表序列化到客戶端端點以供進一步處理。

如果你能渲染HTTP訪問才把頁:
使用HTML網頁並解析它讓目錄列表以獲得使用正則表達式來渲染文件名的文件和即-A-即列表。

相關問題