Guten Abend,
ich versuche mittels Java den Download von Webseiten zu realisieren. Hierfür bin ich auf die Klasse URLConnection gestoßen. Mit dieser Klasse habe ich auch schon eine Lösung geschrieben:
Das funktioniert auch schon ganz gut. Probleme gibt es, falls zwischen der Verbindung noch ein Proxy-Server liegt.
Der Download wird mittels einer JProgressBar in einer anderen Klasse angezeigt und läuft so ab:
Die Lösung funktioniert derweil, nur gibt es folgende Probleme:
1) Der Download ist SEHR langsam
2) Manchmal kommt über die Größe der Datei nichts brauchbares zurück (Wert = -1), daher gibt es keine Informationen über den Fortschritt. Für diesen Fall habe ich die JProgressBar auf setIndeterminate(true) gesetzt. Da aber die Downloadgeschwindigkeit klein ist, weiß der Benutzer jetzt überhaupt nichts über den Fortschritt und das will ich vermeiden.
3) Ich komme nicht durch den Proxy.
Jetzt habe ich eben Fragen, die die Probleme betreffen. Gibt es andere Möglichkeiten, den Code so ähnlich zu realisieren und falls ja, würde ich mich über Hilfe sehr freuen.
Grüße und frohe Festtage,
Stefan
ich versuche mittels Java den Download von Webseiten zu realisieren. Hierfür bin ich auf die Klasse URLConnection gestoßen. Mit dieser Klasse habe ich auch schon eine Lösung geschrieben:
Code:
try{
adresse = new URL(url);
schreiben = new FileOutputStream(dateiname);
verbindung = adresse.openConnection();
lesen = verbindung.getInputStream();
groesse = verbindung.getContentLength();
}
Code:
catch(Exception e){
Properties sysProps = System.getProperties();
sysProps.put("proxyHost", "193.170.8.36");
sysProps.put("proxyPort", "3128");
String login = "xyz:zyx";
verbindung.setRequestProperty("Proxy-Authorization", "Basic " + login);
try{
adresse = new URL(url);
schreiben = new FileOutputStream(dateiname);
verbindung = adresse.openConnection();
lesen = verbindung.getInputStream();
groesse = verbindung.getContentLength();
}
Code:
public void download(){
Thread t = new Thread(new Runnable(){
byte zeichen = 0;
public void run(){
try{
while(zeichen != -1){
zeichen = (byte)lesen.read();
if(zeichen != -1){
quellcode += (char)zeichen;
schreiben.write((char)zeichen);
}
progress++;
//System.out.println(progress + ", " + groesse);
Thread.sleep(1);
}
}
catch(Exception e){
e.printStackTrace();
}
finally{
try{
lesen.close();
schreiben.close();
}
catch(IOException e){
e.printStackTrace();
}
}
}
});
t.start();
}
Die Lösung funktioniert derweil, nur gibt es folgende Probleme:
1) Der Download ist SEHR langsam
2) Manchmal kommt über die Größe der Datei nichts brauchbares zurück (Wert = -1), daher gibt es keine Informationen über den Fortschritt. Für diesen Fall habe ich die JProgressBar auf setIndeterminate(true) gesetzt. Da aber die Downloadgeschwindigkeit klein ist, weiß der Benutzer jetzt überhaupt nichts über den Fortschritt und das will ich vermeiden.
3) Ich komme nicht durch den Proxy.
Jetzt habe ich eben Fragen, die die Probleme betreffen. Gibt es andere Möglichkeiten, den Code so ähnlich zu realisieren und falls ja, würde ich mich über Hilfe sehr freuen.
Grüße und frohe Festtage,
Stefan