Download einer Datei



  • Hallo,

    ich habe bis jetzt noch nicht viel mit Java gemacht, aber bin gerade dabei mich in die Materie reinzukramen. Habe bis jetzt nur mit C,C++ und C# gearbeitet.

    Mein Ziel ist es eine Datei von einem Server herunterzuladen, allerdings wird diese dynamisch(je nach übergebenem Parameter generiert)

    Ich möchte die XML Datei die bei folgender URL erzeugt wird herunterladen:
    http://eu.wowarmory.com/character-sheet.xml?r=Theradras&n=Kryss

    Hier ist ein Code den ich ergoogelt habe, welcher aber einen Fehler ausspuckt wenn ich die URL so als Parameter übergebe:

    package armoryCrawler;
    
    import java.io.*;
    import java.net.*;
    
    /*
     * Command line program to download data from URLs and save
     * it to local files. Run like this:
     * java FileDownload http://schmidt.devlib.org/java/file-download.html
     * @author Marco Schmidt
     */
    
    public class fileDownloader {
    	public static void download(String address, String localFileName) {
    		OutputStream out = null;
    		URLConnection conn = null;
    		InputStream  in = null;
    		try {
    			URL url = new URL(address);
    			out = new BufferedOutputStream(
    				new FileOutputStream(localFileName));
    			conn = url.openConnection();
    			in = conn.getInputStream();
    			byte[] buffer = new byte[1024];
    			int numRead;
    			long numWritten = 0;
    			while ((numRead = in.read(buffer)) != -1) {
    				out.write(buffer, 0, numRead);
    				numWritten += numRead;
    			}
    			System.out.println(localFileName + "\t" + numWritten);
    		} catch (Exception exception) {
    			exception.printStackTrace();
    		} finally {
    			try {
    				if (in != null) {
    					in.close();
    				}
    				if (out != null) {
    					out.close();
    				}
    			} catch (IOException ioe) {
    			}
    		}
    	}
    
    	public static void download(String address) {
    		int lastSlashIndex = address.lastIndexOf('/');
    		if (lastSlashIndex >= 0 &&
    		    lastSlashIndex < address.length() - 1) {
    			download(address, address.substring(lastSlashIndex + 1));
    		} else {
    			System.err.println("Could not figure out local file name for " +
    				address);
    		}
    	}
    
    	public static void main(String[] args) {
    		for (int i = 0; i < args.length; i++) {
    			download(args[i]);
    		}
    	}
    }
    

    Fehlermeldung:

    java.io.FileNotFoundException: character-sheet.xml?r=Theradras&n=Kryss (Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch)
    	at java.io.FileOutputStream.open(Native Method)
    	at java.io.FileOutputStream.<init>(Unknown Source)
    	at java.io.FileOutputStream.<init>(Unknown Source)
    	at armoryCrawler.fileDownloader.download(fileDownloader.java:21)
    	at armoryCrawler.fileDownloader.download(fileDownloader.java:51)
    	at armoryCrawler.fileDownloader.main(fileDownloader.java:60)
    

    Habt ihr spontan eine Idee wo es hängt? Oder ist das ein komplett falscher Ansatz und ich habe mir die Geschichte zu leicht vorgestellt?

    Danke
    Chris



  • Habe das Problem gerade selbst gelöst!

    Danke trotzdem.



  • wenn ich auf den link klicke kommt keine xml datei



  • das ist schon xml, wird nur vom browser mittels des angegebenen stylesheets transformiert. nehm mal an, dass java das auch macht. eigentlich komisch.



  • thordk schrieb:

    nehm mal an, dass java das auch macht. eigentlich komisch.

    !?!?!?



  • eee schrieb:

    thordk schrieb:

    nehm mal an, dass java das auch macht. eigentlich komisch.

    !?!?!?

    URL#openConnection liefert eine instanz von HttpUrlConnection. und da das ding sich http-konform verhalten will, wendet es bei der übertragung der xml datei das xsl-stylesheet an, was dazu führt, dass man nicht die "echte" xml datei erhält, sondern das transformierte html. verständlicher?



  • thordk schrieb:

    eee schrieb:

    thordk schrieb:

    nehm mal an, dass java das auch macht. eigentlich komisch.

    !?!?!?

    URL#openConnection liefert eine instanz von HttpUrlConnection. und da das ding sich http-konform verhalten will, wendet es bei der übertragung der xml datei das xsl-stylesheet an, was dazu führt, dass man nicht die "echte" xml datei erhält, sondern das transformierte html. verständlicher?

    hallo, ja ist verständlicher. aber ist totaler blödsinn. was hat das stylesheet mit http zu tun? http ist für den datentransfer zuständig => nix. => der OP bekommt die richtige xml datei.



  • hm lol 😃


Anmelden zum Antworten