2013-06-14 8 views
5

मैं इस निर्देशिका से सभी फाइलों को डाउनलोड करने का प्रयास कर रहा हूं। हालांकि, मैं इसे केवल एक फ़ाइल के रूप में यूआरएल डाउनलोड करने के लिए प्राप्त कर सकता हूं। मैं क्या कर सकता हूँ? मैंने इस समस्या की खोज करने की कोशिश की और यह भ्रमित था और लोग इसके बजाय httpclients का उपयोग करने का सुझाव देना शुरू कर रहे थे। आपकी मदद के लिए धन्यवाद, यह अब तक मेरा कोड है। यह सुझाव दिया गया है कि मैं निर्देशिका में सभी फाइलों को प्राप्त करने के लिए एक इनपुट स्ट्रीम का उपयोग करता हूं। क्या वह एक सरणी में जाएगा? मैंने ट्यूटोरियल को http://docs.oracle.com/javase/tutorial/networking/urls/ पर आजमाया लेकिन इससे मुझे समझने में मदद नहीं मिली।जावा निर्देशिका में सभी फाइलें और फ़ोल्डर्स डाउनलोड करें

//ProgressBar/Install 
      String URL_LOCATION = "http://www.futureretrogaming.tk/gamefiles/ProfessorPhys/"; 
      String LOCAL_FILE = filelocation.getText() + "\\ProfessorPhys\\"; 
      try { 
       java.net.URL url = new URL(URL_LOCATION); 
       HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
       connection.addRequestProperty("User-Agent", "Mozilla/4.76"); 
       //URLConnection connection = url.openConnection(); 
       BufferedInputStream stream = new BufferedInputStream(connection.getInputStream()); 
       int available = stream.available(); 
       byte b[]= new byte[available]; 
       stream.read(b); 
       File file = new File(LOCAL_FILE); 
       OutputStream out = new FileOutputStream(file); 
       out.write(b); 
      } catch (Exception e) { 
       System.err.println(e); 
      } 

मुझे यह कोड भी मिला जो डाउनलोड करने के लिए फ़ाइलों की एक सूची लौटाएगा। क्या कोई मुझे दो कोडों को गठबंधन करने में मदद कर सकता है?

public class GetAllFilesInDirectory { 

public static void main(String[] args) throws IOException { 

    File dir = new File("dir"); 

    System.out.println("Getting all files in " + dir.getCanonicalPath() + " including those in subdirectories"); 
    List<File> files = (List<File>) FileUtils.listFiles(dir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE); 
    for (File file : files) { 
     System.out.println("file: " + file.getCanonicalPath()); 
    } 

} 

}

+1

जब तक आप किसी यूआरएल के माध्यम से संसाधनों तक नहीं पहुंच सकते, तो आप नहीं कर सकते। – MadProgrammer

+0

ठीक है अब मैं कर सकता हूं, मैंने इसे अनुमति देने के लिए htaccess फ़ाइल संपादित की है। – Kyle

+0

इसके अलावा, यह अपाचे एचटीपी क्लाइंट का उपयोग करके बेहतर होगा जैसा कि यहां दिखाया गया है: [HTTP अनुरोधों को आग और संभालने के लिए java.net.URL कनेक्शन का उपयोग कैसे करें?] (Http://stackoverflow.com/q/2793150/1065197) –

उत्तर

5

आपको पृष्ठ डाउनलोड करने की आवश्यकता है, जो निर्देशिका सूची है, इसे पार्स करें और फिर इनडिविडियो फाइलें डाउनलोड करें पेज में ...

आप की तरह कुछ कर सकता है ...

URL url = new URL("http:www.futureretrogaming.tk/gamefiles/ProfessorPhys"); 
InputStream is = null; 
try { 
    is = url.openStream(); 
    byte[] buffer = new byte[1024]; 
    int bytesRead = -1; 
    StringBuilder page = new StringBuilder(1024); 
    while ((bytesRead = is.read(buffer)) != -1) { 
     page.append(new String(buffer, 0, bytesRead)); 
    } 
    // Spend the rest of your life using String methods 
    // to parse the result... 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} finally { 
    try { 
     is.close(); 
    } catch (Exception e) { 
    } 
} 

या, आप Jsoup डाउनलोड करने और इसका इस्तेमाल सभी कड़ी मेहनत करने के लिए कर सकते हैं ...

try { 
    Document doc = Jsoup.connect("http:www.futureretrogaming.tk/gamefiles/ProfessorPhys").get(); 
    Elements links = doc.getElementsByTag("a"); 
    for (Element link : links) { 
     System.out.println(link.attr("href") + " - " + link.text()); 
    } 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} 

कौन सा outputted ...

?C=N;O=D - Name 
?C=M;O=A - Last modified 
?C=S;O=A - Size 
?C=D;O=A - Description 
/gamefiles/ - Parent Directory 
Assembly-CSharp-Editor-firstpass-vs.csproj - Assembly-CSharp-Edit..> 
Assembly-CSharp-Editor-firstpass.csproj - Assembly-CSharp-Edit..> 
Assembly-CSharp-Editor-firstpass.pidb - Assembly-CSharp-Edit..> 
Assembly-CSharp-firstpass-vs.csproj - Assembly-CSharp-firs..> 
Assembly-CSharp-firstpass.csproj - Assembly-CSharp-firs..> 
Assembly-CSharp-firstpass.pidb - Assembly-CSharp-firs..> 
Assembly-CSharp-vs.csproj - Assembly-CSharp-vs.c..> 
Assembly-CSharp.csproj - Assembly-CSharp.csproj 
Assembly-CSharp.pidb - Assembly-CSharp.pidb 
Assembly-UnityScript-Editor-firstpass-vs.unityproj - Assembly-UnityScript..> 
Assembly-UnityScript-Editor-firstpass.pidb - Assembly-UnityScript..> 
Assembly-UnityScript-Editor-firstpass.unityproj - Assembly-UnityScript..> 
Assembly-UnityScript-firstpass-vs.unityproj - Assembly-UnityScript..> 
Assembly-UnityScript-firstpass.pidb - Assembly-UnityScript..> 
Assembly-UnityScript-firstpass.unityproj - Assembly-UnityScript..> 
Assembly-UnityScript-vs.unityproj - Assembly-UnityScript..> 
Assembly-UnityScript.pidb - Assembly-UnityScript..> 
Assembly-UnityScript.unityproj - Assembly-UnityScript..> 
Assets/ - Assets/ 
Library/ - Library/ 
Professor%20Phys-csharp.sln - Professor Phys-cshar..> 
Professor%20Phys.exe - Professor Phys.exe 
Professor%20Phys.sln - Professor Phys.sln 
Professor%20Phys.userprefs - Professor Phys.userp..> 
Professor%20Phys_Data/ - Professor Phys_Data/ 
Script.doc - Script.doc 
~$Script.doc - ~$Script.doc 
~WRL0392.tmp - ~WRL0392.tmp 
~WRL1966.tmp - ~WRL1966.tmp 

फिर आप प्रत्येक फ़ाइल के लिए एक नया URL का निर्माण और के रूप में आप पहले से ही किया है पढ़ने की जरूरत है ...

उदाहरण के लिए, Assembly-CSharp-Edit..> के लिए hrefAssembly-CSharp-Editor-firstpass-vs.csproj है, जो एक रिश्तेदार लिंक के लिए प्रकट होता है, तो आप http://www.futureretrogaming.tk/gamefiles/ProfessorPhys के साथ इस उपसर्ग की जरूरत है एक नया की URLhttp://www.futureretrogaming.tk/gamefiles/ProfessorPhys/Assembly-CSharp-Editor-firstpass-vs.csproj

बनाने के लिए होगा आप प्रत्येक तत्व आप

हड़पने के लिए चाहते हैं के लिए यह करने के लिए की आवश्यकता होगी
+0

धन्यवाद। मैं वास्तव में इस में देख लूंगा! – Kyle

+0

वाई को अंधेरे वोटों से प्यार करना है। कृपया कुछ फीडबैक प्रदान करने के लिए साहस रखें ताकि हम सभी गलतियों से सीख सकें और – MadProgrammer

+0

@MadProgrammer को सुधारने का अवसर अंधेरे डाउनवोट के लिए खेद है, मुझे समझाया जाना चाहिए: शुरुआत के लिए, आपका शीर्ष कोड काम नहीं करेगा जो कोई भी कारण के लिए। मैंने सब कुछ के माध्यम से जांच परेशान नहीं किया, लेकिन यह सिर्फ काम नहीं करेगा। दूसरा, जेएसओप ने एक निर्भरता जोड़ा - जिसे मैं व्यक्तिगत रूप से सोचता हूं वह अनावश्यक और गन्दा है। और यह भी कि, आपने आउटपुट की अपेक्षा की थी, लेकिन यह नहीं पता था कि विभिन्न वेब प्रदर्शन अनुप्रयोगों (उदा। Apache/ngix/etc) का उपयोग करके उत्पादन अलग है। अंत में, मैं "download.txt" डाउनलोड करता हूं, उस फ़ाइल में तारों के माध्यम से पुनरावृत्त होता है, और उन्हें डाउनलोड किया जाता है। मैंने अभी आपकी पोस्ट को अनुपयोगी पाया है, सब कुछ है। – Joehot200

0

आप HTTrack तरह उपकरण पर विचार किया है, यह एचटीएमएल पर एंकर टैग की उपस्थिति का पता लगाने और डाउनलोड पूरी वेबसाइट (पेड़ स्तर द्वारा सीमित) कर सकते हैं। आप यह भी निर्दिष्ट कर सकते हैं कि कौन सी फाइलें डाउनलोड की जानी चाहिए आदि

यदि यह आपकी आवश्यकता के अनुरूप नहीं है, तो आप अभी भी हाथ से लिखे गए जावा प्रोग्राम का उपयोग कर सकते हैं, सिवाय इसके कि समस्या यूआरएल में फाइलों की सूची प्राप्त कर रही है (और सभी सबफोल्डर भीतर)। आपको एचटीएमएल को पार्स करने, सभी एंकर टैग इकट्ठा करने और इसे पार करने की आवश्यकता है (जो एचटीट्रैक कर रहा है)

+0

पोस्ट के लिए धन्यवाद, यह पहले से ही सॉफ्टवेयर का एक और टुकड़ा है। – Kyle

+0

मैंने अधिक प्रश्न शामिल करने के लिए अपना प्रश्न संपादित किया। – Kyle

संबंधित मुद्दे