# Bilder aus Internet downloaden



## fleckdalm (29. Aug 2011)

Der titel sagt eigentlich schon alles! Wie kann man in Java Bilder (möglichst ohne Zusatzbibliotheken) aus dem internet downloaden und am Computer speichern. Mich würde es aber sowieso auch für andere dateitypen zb. .jars für programmupdates interesssieren.

Danke, Grüße fleckdalm


----------



## Andi_CH (29. Aug 2011)

Wie kannst du auf die Dateien zugreifen?
ftp?
http?
https?
......


----------



## Dit_ (29. Aug 2011)

zB so: Image download


----------



## fleckdalm (30. Aug 2011)

Danke! So was habe ich gemeint. Geht diese methode eigentlich auch mit anderen dateitypen? Normalerweise schon oder?

Grüße fleckdalm

Edit: also mit bildern klappt es echt super! Aber z.B. .jar files lassen sich dann nicht starten (kommt irgendeine Fehlermeldung mit invalid .jar file) was kann man machen das es auch mit .jars geht?
Achja und wie kann man in java andere java programme(also .jars) starten?

Danke, Grüße Fleckdalm


----------



## Michael... (30. Aug 2011)

Das Einlesen und Schreiben könnte man noch optimieren in dem man nich jedes Byte einzeln liest und schreibt.



fleckdalm hat gesagt.:


> Danke! So was habe ich gemeint. Geht diese methode eigentlich auch mit anderen dateitypen? Normalerweise schon oder?


Ja, es werden ja nur Daten byte-weise von A nach B kopiert.


fleckdalm hat gesagt.:


> Edit: also mit bildern klappt es echt super! Aber z.B. .jar files lassen sich dann nicht starten (kommt irgendeine Fehlermeldung mit invalid .jar file) was kann man machen das es auch mit .jars geht?


handelt es sich dabei um spezielle jars oder gilt das auch für einfache "Test" jars? Hast Du mal Original und Kopie verglichen, z.B. bzgl. Dateigröße, Inhalt...


fleckdalm hat gesagt.:


> Achja und wie kann man in java andere java programme(also .jars) starten?


In der selben JVM bzw. im selben Prozess, indem man die entsprechende main(...) aufruft.
Als eigenen Prozess in dem man über Runtime bzw. ProcessBuilder einen neuen Prozess startet


----------



## fleckdalm (30. Aug 2011)

Danke!

Wie macht man das mit dem optimieren also nicht alles einzeln? Man muss doch prüfen ob es noch gültig ist deshalb alles einzeln oder?

Ich hab zum test (für .jars) einfach mein spiel (jumpnroll siehe signatur) genommen. Die datei ist gleich groß und so aber wenn man sie startet gibt die jvm einen error "invalid or corrupt file". 

Ich meinte als eigenen prozess, ich less mir die links mal durch

Grüße fleckdalm

Edit: was ich so gesehen habe kann man mit dem was du mir da verlinkt hast nur .exe dateien starten...


----------



## Michael... (30. Aug 2011)

> ```
> for (int b; (b = in.read()) != -1; ) {
> out.write(b);
> }
> ```


Statt jedes Byte einzeln einzulesen, verwendet man üblicherweise ein Byte-Array:

```
byte[] buffer = new byte[2048];
int len;
while ((len = in.read(buffer))!=-1)
	out.write(buffer, 0, len);
```

Der Fehlermeldung nach scheint, da beim Kopieren etwas schief zulaufen. Lässt sich das Archiv noch entpacken?


----------



## fleckdalm (30. Aug 2011)

nein entpacken geht auch nicht da kommt dann (bei 7zip) diese datei kann nicht als archiv entpackt werden...


----------



## Michael... (30. Aug 2011)

Poste doch mal den Code(abschnitt) mit dem die Datei kopiert wird.


----------



## fleckdalm (30. Aug 2011)

```
private void download() {
        try {
      
            URL u = new URL("http://dl.dropbox.com/u/13384015/JumpnRoll/Jump%27nRoll.jar");
            InputStream is = u.openStream();
            BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(System.getProperty("user.home")+"/test.jar"));
            for(int i;(i=is.read())!=-1;){
                bos.write(i);
            }

System.out.println("succesfully saved!");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
```


----------



## Michael... (30. Aug 2011)

bitte darauf achten, dass Streams auch wieder geschlossen werden.
Wie schaut's da im konkreten Fall aus? Werden Input und OutputStream geschlossen?
Ruf mal am Ende close() an beiden auf?


----------



## fleckdalm (30. Aug 2011)

Oh danke ich hatte close vergessen
Nur komisch das es mit den bildern trotzdem funktioniert hat...
Außerdem dachte ich das close ab java7 nicht mehr nötig ist oder habe ich da was falsch verstanden?

Wegen dem .jar dateien starten das was du mir verlinkt hast geht glaube ich nur bei .exe dateien...
gibt es auch was für .jars?

Grüße Fleckdalm


----------



## Michael... (30. Aug 2011)

fleckdalm hat gesagt.:


> Wegen dem .jar dateien starten das was du mir verlinkt hast geht glaube ich nur bei .exe dateien...
> gibt es auch was für .jars?


jar Dateien können grundsätzlich nicht "direkt" gestartet werden.
Beim Starten einer Java Applikation wird die Applikation ja nicht direkt gestartet. Es wird eine JVM gestartet, der man sagt, welcher Applikationscode ausgeführt werden soll.
Und dafür gibt es (auf Windowssystemen) zwei exe java.exe und javaw.exe.

Beispiele zum Aufruf einer Java Applikation findest Du z.B. hier:
http://www.java-forum.org/java-basics-anfaenger-themen/123268-anhand-jar-andere-jar-oeffnen.html#post797319


----------

