# -JPEG oder -PNG aus Internet URL in File speichern?



## zReaLy (23. August 2013)

Hallo,
ich weiss es gibt schon in diesen Forum ein Thread dazu da funktioniert das aber nicht wirklich,
deswegen wollte ich mal nen neuen eröffnen.

Ich wollte wissen wie man z.b. aus einem URL names "http://whatevaah.de/whatevaah.jpg" oder sowas,
das Bild in den eigenen files speichern kann...

ich hoffe ihr könnt mir ein beispiel geben .


----------



## ComFreek (23. August 2013)

Hi,

schau mal hier: http://stackoverflow.com/a/921408/603003


----------



## zReaLy (23. August 2013)

der code von mir von deinem link erstellt einfach kein bild?

```
import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

public class ImageDownloader {
	public static void main(String[] args) {
		try {
			saveUrl("C:/Users/User/Desktop/JPEG.jpg", "http://stockazoo.com/wp-content/uploads/2009/02/blue-chrome-g.jpg");
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
public static void saveUrl(String filename, String urlString)
      throws MalformedURLException, IOException
    {
        BufferedInputStream in = null;
        FileOutputStream fout = null;
        try
        {
            in = new BufferedInputStream(new URL(urlString).openStream());
            fout = new FileOutputStream(filename);

            byte data[] = new byte[1024];
            int count;
            while ((count = in.read(data, 0, 1024)) != -1)
            {
                fout.write(data, 0, count);
            }
        }
        finally
        {
            if (in != null)
                in.close();
            if (fout != null)
                fout.close();
        }
    }
}
```


----------



## ComFreek (23. August 2013)

Bei mir funktioniert es einwandfrei.

Kommt irgendwas in der Fehlerkonsole? Welche IDE nutzt du?


----------



## zReaLy (23. August 2013)

Hmm,
ich benutze Eclipse falls ich das "IDE" nicht falsch verstanden habe und
in der Console kommt nach gefühlten 3 Minuten vllt. liegt es an meinem schlechtem
Lappy,


```
java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(Unknown Source)
	at java.net.SocketInputStream.read(Unknown Source)
	at java.io.BufferedInputStream.fill(Unknown Source)
	at java.io.BufferedInputStream.read1(Unknown Source)
	at java.io.BufferedInputStream.read(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
	at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at java.net.URL.openStream(Unknown Source)
	at ImageDownloader.saveUrl(ImageDownloader.java:26)
	at ImageDownloader.main(ImageDownloader.java:10)
```


----------



## zReaLy (23. August 2013)

Könnte mir da jmd. noch bei helfen ?


----------



## ComFreek (23. August 2013)

Ja, IDE hast du richtig verstanden.

Hast du eine Firewall oder ein Antivirenprogramm? Ich würde darauf tippen, dass diese den Zugang blockieren.


----------



## hendl (23. August 2013)

Hi
Meiner Meinung kommt die Fehlermeldung aufgrund eines TimeOut Fehlers.
Da sie wenn die Verbindung durch die Firewall blockiert wird so aussieht

```
java.net.SocketException: Permission denied: connect
	at java.net.DualStackPlainSocketImpl.connect0(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
	at java.net.Socket.connect(Socket.java:581)
	at java.net.Socket.connect(Socket.java:530)
	at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
	at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
	at sun.net.www.http.HttpClient.<init>(HttpClient.java:211)
	at sun.net.www.http.HttpClient.New(HttpClient.java:308)
	at sun.net.www.http.HttpClient.New(HttpClient.java:326)
	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1108)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1044)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:941)
	at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:886)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1455)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1383)
	at java.net.URL.openStream(URL.java:1038)
	at copy_pic.ImageDownloader.saveUrl(ImageDownloader.java:28)
	at copy_pic.ImageDownloader.main(ImageDownloader.java:12)
```
Möglicherweise war der Server zu der Zeit in der du es versucht hast nicht erreichbar, probier doch zum Testen einfach mal einen anderen Server oder falls du die Möglichkeit hast lokal.

Lg hendl


----------



## zReaLy (23. August 2013)

wie bekommt man das denn lokal hin ?


----------



## hendl (24. August 2013)

Einfach den Url Pfad in das ändern, wobei das file:/// wichtig ist.

```
saveUrl("C:/Users/Admin/Desktop/JPEG.jpg", "file:///D:/Schule/29122011223.jpg");
saveUrl("C:/Users/Admin/Desktop/JPEG.jpg", "file:///<Hier einfach einen Pfad zu einem Bild einfügen>");
```

Lg hendl


----------



## zReaLy (24. August 2013)

Komischer Weise funktioniert es so 

```
saveUrl("C:/Users/Java/Desktop/test2.png", "file:///C:/Users/Java/Desktop/test.png");
```

Aber anders leider auch nicht -.- also die online urls


----------



## ComFreek (24. August 2013)

Ja gut, es macht schon einen Unterschied eine HTTP-Anfrage zu schicken oder auf die eigene Festplatte zuzugreifen.

Teste mal andere URIs.


----------



## sheel (24. August 2013)

a) Einen *Buffered*InputStream für das zu verwenden
kann je nach VM eine schlechte Idee sein.

b) Mach auch in saveUrl ein catch zum try, mit Ausgab der Exception

c) Ich werde gleich die Seite auf Useragentzeug untersuchen...
ok, damit kein Problem


----------



## ComFreek (24. August 2013)

sheel hat gesagt.:


> b) Mach auch in saveUrl ein catch zum try, mit Ausgab der Exception
> 
> c) Ich werde gleich die Seite auf Useragentzeug untersuchen...



b) Die Exception wird eh hochgeworfen und die main()-Methode hat dafür die catch-Blöcke und gibt die Stack traces aus. Von daher nicht nötig.

c) Bei mir klappt es ja mit der gleichen Seite.

Zu a): Könnte wirklich das Problem sein, hier steht auch was zu: http://stackoverflow.com/a/2965406/603003


----------



## sheel (24. August 2013)

b) Ok, sind die einzigen und hatte noch dazu einen Denkfehler


----------



## zReaLy (24. August 2013)

ComFreek hat gesagt.:


> hier steht auch was zu: http://stackoverflow.com/a/2965406/603003


das passt ziemlich gut zu der exception, aber wie könnte ich das denn beheben?


ich hoffe mal das sich da wer auskennt wäre echt schade wenn ich sowas nicht benutzten könnte -.-


----------



## sheel (24. August 2013)

```
public static void saveUrl(String filename, String urlString)
      throws MalformedURLException, IOException
    {
        InputStream in = null; ////
        FileOutputStream fout = null;
        try
        {
            in = new URL(urlString).openStream(); ////
            fout = new FileOutputStream(filename);
 
            byte data[] = new byte[1024];
            int count;
            while ((count = in.read(data, 0, 1024)) != -1)
            {
                fout.write(data, 0, count);
            }
        }
        finally
        {
            if (in != null)
                in.close();
            if (fout != null)
                fout.close();
        }
    }
}
```
Wenns so auch nichts wird, eventuell den "Umweg" über die UrlConnection-Klasse
manuell versuchen, statt von Url auszugehen.


----------



## zReaLy (24. August 2013)

Es kam die gleiche Exception wie auf Seite 1 
Es scheint ja so, dass du dich vllt. mit dieser UrlConnection auskennst,
könntest du mir eventuell den "Umweg" zeigen?
Und falls nicht mir vllt. eine Tutorialseite dazu zeigen?
Ich will ja nicht das der Thread zu lang wird!


----------



## zReaLy (24. August 2013)

Hmm,
nagut dann sollte es einfach nicht sein, wäre jetzt aber auch blöd, sich nun darüber zu ärgern.
Also ich bin dabei ein kleines Spiel zu machen, nur wusste ich nicht wie ich die Bilder mit geben sollte und dann kam mit die Idee aus dem I-Net die irgendwie down zu laden, doch so hat es nicht funktioniert, deshalb wollte ich fragen, was für Methoden gibt es denn, ausser die Bilder in dem Package zu lagern, oder sonst irgendsowas komisches


----------



## ComFreek (24. August 2013)

Wieso packst du die Bilder nicht in dein Eclipse-Projektverzeichnis?


----------



## sheel (24. August 2013)

Nur weil eine Stunde mal keiner antwortet muss man nicht aufgeben...
aber die Bilder deswegen jedesmal aus dem Inet zu laden ist nicht sinnvoll.
Stichwort Jar-Datei
Alle .class und Bilder und was sonst noch dazugehört werden damit in eine Datei gepackt


----------



## zReaLy (24. August 2013)

Hmm,
ich hab da mal was versucht vllt. könnt ihr mir bei helfen...

also die Methode wäre:

```
public static void ImgPath(String arg0,String arg1) {
		File sourceFile = new File(arg0);
		File destinationFile = new File(arg1);
		
		sourceFile.renameTo(destinationFile);
	}
```

und starten tuh ich so:

```
String srcPath = getClass().getClassLoader()+"/images/Player.png";
		String desPath = System.getProperty("user.dir")+"/source/textures/Player.png";
		New.ImgPath(srcPath, desPath);
```

das heisst ich lasse sie im package und dann sollen sie in einen anderen ordner importiert werden nur ich weiss nicht wirklich wie ich den srcPath dort richtig gestalten kann...


----------



## ComFreek (24. August 2013)

Was willst du denn genau machen?

Wieso verschieben?


----------



## zReaLy (24. August 2013)

Aso der verschiebt die ?  
Also ich möchte das beim Start der .Jar einfach Bilder in einem Ordner(letzter beitrag von mir desPath) gelagert werden, zuerst wollte ich ja falls sie nicht existieren würden,sie vom internet dort speichern lassen, das hat ja dann nicht wirklich funktioniert.
Dann wollte ich sie im package bleiben lassen und dann in "desPath" rein speichern
um sie von dort wieder auslesen zu können...

falls ich zu schlecht erkläre, bemüh ich mich gleich nochma, ich habs nicht so damit


----------



## sheel (24. August 2013)

Und warum willst du die Bilder in einen Ordner lagern?
Wenn du sie zum Anzeigen für ein Spiel brauchst reicht es,
die einfach in der Jar-Datei drin zu lassen.


----------



## zReaLy (24. August 2013)

Ja, ich weiss, aber ich hätte sie einfach lieber in dem Ordner finde ich einfach besser.
Ist für mich übersichtlicher und ich mag einfach diese zip dinger nicht D:

also hoffe ich auf eine Problemlösung, falls sie hier nicht kommen sollte, muss ich mich da mal iwi genauer und konzentrierter dran setzten


----------

