# InputStream und File



## Gast2 (4. Sep 2009)

Hallo zusammen,

ich bekomme einen InpustStream (upload),  und möchte diesen in einem File abspeichern. Wie kann ich das machen?  Der Inputstream könnte ja eine txt, zip oder weiteres sein. Wie kann ich das im InputStream unterscheiden als was ich das abspeichern muss?


----------



## SlaterB (4. Sep 2009)

was macht der Inhalt für einen Unterschied? oder geht es dir nur um die Wahl der Endung für den Dateinamen?
byte für byte schreiben


----------



## Gast2 (4. Sep 2009)

Ja es geht mir um die Endung...
Kann ja schlecht ne zip Datei in eine txt speichern ???:L


----------



## SlaterB (4. Sep 2009)

dann hat das mit Stream und Uploads aber nix zu tun 

neue Frage:
du hast beliebige Daten vorliegen und möchtest wissen was sie sind,
keine Informationen von außen? Dateiname, Quelle, Ziel, Berechtigung, Viren-Warnung?

ich kann dazu nix weiter sagen, außer Testen: versuchen als Zip einzulesen, wenns klappt dann war es wohl Zip,
dadrin stehen hoffentlich Namen zu den enthaltenen Dateien, sonst dasselbe Problem,
aber zwischen Bild und Txt zu unterscheiden.., das müssen höhere Tools nach Wahrscheinlichkeit klären, wenn überhaupt


----------



## ARadauer (4. Sep 2009)

du müsstest doch irgendwo bei deinem upload den Dateinamen mitbekommen von dem kannst du die endung nehmen...

Befindest du dich in einem Servlet? Wie sieht dein Code aus?


----------



## Gast2 (4. Sep 2009)

Ja das ist halt n framework vond em bekomm ich ein inputstream. ich bekomm im client wenn ich was hochlade auf serverseite einfach einen inputstream. In dem steht blöderweise auch noch drin filename0=filnameCONTENT0=Binärcode.
Und nun wollte ich einfach das file das hochgeladen wurde auf dem server ablegen.


----------



## Gast2 (4. Sep 2009)

Hier mal ein Bsp.

```
public void passClientFilesAsStream(InputStream stream)
        {
                        FileOutputStream os = null;
                        File tempFile;
                        try {
                                tempFile = File.createTempFile("upload", ".tmp");
                                os = new FileOutputStream(tempFile);
                                setServerTmpFileName(tempFile.getAbsolutePath());
                                copy(stream, os);
                                } catch (IOException e) {
                                 e.printStackTrace();
                                }
                                     finally {
                                        try {
                                                os.close();
                                        } catch(Exception ignore) {

                                        }
                                }
        }
```

copy kopiert einfach die bytes


----------



## SlaterB (4. Sep 2009)

was machst du denn im weiteren Verlauf mit der Datei?
selbst wenn du den Typ kennst,
also temp1.txt, temp2.jpg usw. speichern kannst, brauchst du die Dateien irgendwann für irgendwas?
unabhängig vom Inhalt?


----------



## ARadauer (4. Sep 2009)

> In dem steht blöderweise auch noch drin filename0=filnameCONTENT0=Binärcode


kannst du da nicht den filenamen extrahieren?


----------



## Gast2 (4. Sep 2009)

wenn ich den filename hätte wärs ja kein ding ^^...
ja ich will die dateien parsen und auf inhalt prüfen...


----------



## bygones (4. Sep 2009)

SirWayne hat gesagt.:


> wenn ich den filename hätte wärs ja kein ding ^^...
> ja ich will die dateien parsen und auf inhalt prüfen...



nehmen wir den leichten Fall von plain text an... ists txt / xml / html / xslt / java / groovy / scala ?

wenns nicht im stream vermerkt ist irgendwo dann viel spass ;-)


----------



## Gast2 (4. Sep 2009)

Mhm ok ich hab die Datei kopiert habs mal mit einer txt Datei versucht, aber wenn die dann einles kommtwas anderes raus ^^... komisch


----------

