# datei downloaden und speichern



## Guest (11. Apr 2005)

hi, ich möchte eine methode schreiben, die eine datei (jpg) aus einer url (http://www.abc.de/bild.jpg) lokal auf der platte speichern kann. das kann nich so schwer sein oder? ich raffe es aber nicht, hat vielleicht jemand ein codebeispiel oder tut?


----------



## meez (11. Apr 2005)

So:


```
URL url = new URL("http://www.abc.de/bild.jpg");
InputStream in = url.openConnection().getInputStream();
OuputStream out = new FileOutputStream("<dateiname>");
byte[] buffer = new byte[1024];
for (int n;(n = in.read(buffer)) != -1;out.write(buffer, 0, n);
in.close();
out.close();
```


----------



## stev.glasow (11. Apr 2005)

URL url = new URL("http://molle-spritz.funplexus.de/images/frau_joint.jpg");
InputStream in = url.openStream();
dann aus dem InputStream lesen und in einen FileOutputStream schreiben.


----------



## meez (11. Apr 2005)

tststs... Herr Admin bitte Code Tags verwenden... :bae:


----------



## Sky (11. Apr 2005)

stevg hat gesagt.:
			
		

> URL url = new URL("http://molle-spritz.funplexus.de/images/frau_joint.jpg");
> InputStream in = url.openStream();
> dann aus dem InputStream lesen und in einen FileOutputStream schreiben.



Hat meez doch geschrieben... Du wolltest doch nur deine URL posten  :wink:


----------



## Guest (11. Apr 2005)

ach so einfach... dankeschön! 
aber diese zeile funzt irgendwie nicht:


```
for (int n;(n = in.read(buffer)) != null; out.write(buffer, 0, n));
```

-> incompatibel type for int. cant convert int to null ...  ??? :L


----------



## Gast (11. Apr 2005)

cool! danke!


----------



## Sky (11. Apr 2005)

```
for (int n;(n = in.read(buffer)) != -1; out.write(buffer, 0, n));
```


----------



## meez (11. Apr 2005)

...  Habs nachträglich geändert... :roll:


----------



## Guest (13. Apr 2005)

sorry fürs nerven, aber:

ich hab jetzt diese methode, die eine datei runterlädt und in ein directory speichern soll. ich bekomme eine FileNotFoundException (Zugriff verweigert). aber warum? ich habe ein File erzeugt, mit dem Parameter String Path und müsste doch dann mit dem FileOutputStream darauf schreiben können, oder? wo ist mein denkfehler?


```
import java.io.*;
import java.net.*;

class Test{
    public static void main (String[] args) throws Exception {
        String seitenurl = "molle-spritz.funplexus.de/images/frau_joint.jpg";
        String dokurl = "12345";
        //bild downloaden
        URL neturl = new URL("http://"+seitenurl); 
        InputStream in = neturl.openConnection().getInputStream(); 
        // Lokalen Pfad der Datei basteln
        //C:\Cache\12345\molle-spritz.funplexus.de/images/frau_joint.jpg
        String localurl = "C:"+File.separator+"Cache"+File.separator+dokurl+File.separator+seitenurl;
        //Fileobjekt mit dem Pfad erzeugen und dort rein die datei speichern
        OutputStream out = new FileOutputStream(new File(localurl)); 
        byte[] buffer = new byte[1024]; 
        for (int n;(n = in.read(buffer)) != -1; out.write(buffer, 0, n)); 
        in.close(); 
        out.close();
    
    }
    }
```


----------



## meez (13. Apr 2005)

Du musst kein Verzeichnis angeben, sondern ein Dateiname...


----------



## Guest (13. Apr 2005)

aber ich möchte die datei in ein bestimmtes verzeichnis speichern. ich dachte ich könnte den pfadnamen mit angeben beim erzeugen vom file-objekt. api:



> Public Constructors
> 
> File(File dir, String name)
> 
> ...


.


----------

