2012-07-19 59 views
15

Giả sử tôi có URL: http://java.sun.com/j2se/1.5/pdf tôi muốn nhận danh sách tất cả các tệp/thư mục trong thư mục pdf. Tôi đang sử dụng java 5. Tôi có thể nhận danh sách thư mục với chương trình này http://www.httrack.com/. nhưng với java tôi không biết nếu nó có thể.Cách lấy danh sách các tệp/thư mục của url thư mục trong java?

Có cơ thể nào biết cách làm thế nào để có được nó trong java hoặc làm thế nào chương trình này thực hiện công việc mà java không thể?

+5

bạn có biết loại yêu cầu HTTP nào bạn sẽ thực hiện để nhận chúng không? Bạn có biết liệu máy chủ HTTP đích có hỗ trợ danh sách thư mục không? – wrschneider

+0

Tôi không có nhiều thông tin về yêu cầu máy chủ và HTTP, điều duy nhất tôi có là một URL như đã đề cập ở trên. – itro

Trả lời

19

Có một số điều kiện:

  1. Máy chủ phải được kích hoạt thư mục liệt kê theo thứ để bạn có thể xem nội dung của nó.
  2. Không có cách nào tôi biết (không có API hoặc động từ HTTP) để truy xuất danh sách và do đó danh sách thường được hiển thị dưới dạng trang HTML thông thường
  3. Bạn sẽ phải phân tích cú pháp trang HTML này để tìm mục.

Việc phân tích cú pháp có thể được thực hiện dễ dàng bằng cách sử dụng lib như JSoup.

Ví dụ, sử dụng JSoup bạn có thể lấy các tài liệu tại url http://howto.unixdev.net/ như thế này:

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

Will đầu ra:

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 

Đối với url mẫu của bạn http://java.sun.com/j2se/1.5/pdf đây là một trang không tìm thấy, vì vậy tôi nghĩ bạn không may mắn.

+0

Tôi có thể lấy danh sách thư mục với chương trình này http://www.httrack.com/. Tôi nghĩ rằng phải có cách để làm điều đó với java quá – itro

4

Nếu URL là dành cho tệp: giao thức, khi đó bạn có thể chuyển đổi nó thành java.io.File, sau đó sử dụng các phương pháp đó để liệt kê thư mục.

Nếu URL là dành cho giao thức http: thì không có khái niệm về thư mục tệp và bạn về cơ bản không thể làm những gì bạn nghĩ mình muốn làm. Bạn sẽ phải lùi lại và nhìn vào yêu cầu cấp cao hơn mà bạn đang cố gắng thực hiện.

Yêu cầu máy chủ của bạn triển khai Servlet để truy xuất danh sách tệp từ thư mục được chỉ định bởi yêu cầu mà nó nhận được. Tại điểm cuối của máy khách, ứng dụng của bạn sẽ gửi một yêu cầu tới máy chủ bằng cách cung cấp một đường dẫn (virtual? Relative?) Mà bạn định liệt kê. servlet sẽ trả về danh sách tệp trong đường dẫn được yêu cầu, được truy xuất từ ​​hệ điều hành của máy chủ. Sau đó, nó sẽ tuần tự hóa danh sách tập tin đến điểm cuối của máy khách để xử lý tiếp.

Nếu bạn chỉ có thể hiển thị trang bằng quyền truy cập HTTP:
Sử dụng trang HTML và phân tích danh sách thư mục để lấy danh sách tệp và viz-a-viz sử dụng biểu thức chính quy để hiển thị tên tệp.

Các vấn đề liên quan