Problem mit Java Programm zum runterladen und speichern von einer XML-Datei

eaglestar

Mitglied
Hi und Hallo,

wie der Titel schon sagt, möchte ich eine XML Datei aus dem Internet runterladen und auf meinem PC abspeichern.
Mein Programm meldet sich an einer Internetseite an und möchte dann eine XML runterladen.
Das anmelden samt Cookie funktioniert schon.

Hier der Code der das eingentlich machen soll.

Java:
        		//*** XML-Datei speichern ***
//**BAUSTELLE*******************************************************************************        		
        		//Internetadresse wird aufgebaut
        		URL xmlURL = new URL("UlrtaLangeURLstehtDannHier");
        		HttpURLConnection xmlURLCon = (HttpURLConnection) impExp.openConnection ();
        		//Cookie wird mitgegeben
        		xmlURLCon.setRequestProperty("Cookie", cookie);
        		//Eingehender Stream wird "erzeugt"
        		BufferedInputStream xmlURLin = new BufferedInputStream(xmlURL.openStream());
        		//Lokale Datei wird erzeugt
        		File file = new File("c:/desktop/datei.xml");
                BufferedOutputStream xmlURLout = new BufferedOutputStream(new FileOutputStream(file));
                //B wird zuTestzwecken in die lokale XML-Datei geschrieben
                xmlURLout.write('B');
                
                byte[] buffer = new byte[200000];
                int len;
                
                //Ausgelesene Daten in die Datei schreiben
                while ((len = xmlURLin.read(buffer)) != -1) {
                	xmlURLout.write(buffer, 0, len);
                }
                
                xmlURLout.flush();
                xmlURLout.close();
                xmlURLin.close();
//**BAUSTELLE-ENDE***************************************************************************

Der Buchstabe B wird auch in die Datei geschrieben! :p
Aber der Rest nicht.

Die URL die ich verwende ich keine absolute.
Also nicht:
Code:
        		//Internetadresse wird aufgebaut
        		URL xmlURL = new URL("UlrtaLangeURLstehtDannHier/datei.xml");

sondern:
Code:
        		//Internetadresse wird aufgebaut
        		URL xmlURL = new URL("UlrtaLangeURLstehtDannHier?WasSollIchMachen?mache=Export");

Wenn ich die "mache=Export"-URL aufrufe im Browser öffnet sich der Speichern-Dialog.


Weiß einer warum beim mir die Daten nicht in die Datei geschrieben werden?

Gruß
eagle
 
Leider habe ich immernoch keine Lösung für mein Problem gefunden!
Hat nicht jemand einen kleinen Tipp für mich?

Gruß
eagle
 
Hi.

Ich könnte mir vorstellen, dass dort eine Umleitung stattfindet. Ist denn die FollowRedirects Eigenschaft gesetzt? Wie ist der ResponseCode? Wie lautet die ResponseMessage?

Gruß
 
Sind überhautpt der BufferedInputStream und der BufferedOutputStream die richtige Wahl, oder muss ich FileReader bzw. -Writer verwenden!?


Gruß
eagle
 
Ein Reader interpretiert die Bytes aus den InputStream, soll heissen er kümmert sich um das Encoding. Hat aber in der Tat wohl nichts mit deinem jetzigen Problem zu tun.
Versuche es doch mal mit einem nicht gebufferten InputStream:
Code:
  InputStream xmlURLin = new InputStream(xmlURL.openStream());
 
Ein Reader interpretiert die Bytes aus den InputStream, soll heissen er kümmert sich um das Encoding. Hat aber in der Tat wohl nichts mit deinem jetzigen Problem zu tun.
Versuche es doch mal mit einem nicht gebufferten InputStream:
Code:
  InputStream xmlURLin = new InputStream(xmlURL.openStream());


Eclipse sagt mir hierbei, dass es keine Instanz bilden kann.
Habe es aber mal auch mit anderen Streams probiert, aber nicht hat funktioniert.


Hier ist ein Link zu einem netten Beispiel.
http://www.roseindia.net/java/java-conversion/InputstreamToFile.shtml

So sollte es funktionieren....tut es aber nicht -.-
 
ahh ja sorry mein Fehler! InputStream ist abstract

ich habe deinen Code mal leicht abgewandelt getestet, und bei mir läuft es ohne Probleme:
Code:
public static void main(String[] argv) {
      try {
         URL xmlURL = new URL("http://www.google.de");
         
         HttpURLConnection xmlURLCon = (HttpURLConnection) xmlURL.openConnection();
   
         //Eingehender Stream wird "erzeugt"
         BufferedInputStream xmlURLin = new BufferedInputStream(xmlURL.openStream());
         //Lokale Datei wird erzeugt
         File file = new File("d:/temp/google.html");
         BufferedOutputStream xmlURLout = new BufferedOutputStream(new FileOutputStream(file));
        
         byte[] buffer = new byte[200000];
         int len;
        
         //Ausgelesene Daten in die Datei schreiben
         while ((len = xmlURLin.read(buffer)) != -1) {
             xmlURLout.write(buffer, 0, len);
         }
        
         xmlURLout.flush();
         xmlURLout.close();
         xmlURLin.close();
      } catch (Exception e) {
         e.printStackTrace();
      }
      
   }


Evtl. liegt es am Server den du erreichen willst?
 
Okay hab auch nochmal bei mir getestet....dann liegt es wie du schon vermutest am Server von dem ich die Datei holen will.

Komisch ist nur, wenn ich den URL-String den ich anlege, direkt in den Browser eingebe, kommt der Speichern/Öffnen-Dialog für die XML-Datei.
Daher denke ich, dass zumindest der Aufruf funktioniert.
 
Um das Problem weiter einzugrenzen könntest du die Datei ja mal runterladen, auf einen lokalen Server stellen und es mit dem DL von dort aus probieren.
 
Zurück