Download: Filename + Process waitFor()

Juggl3r

Mitglied
Hallo,

ich habe zwei Fragen:

1) Ich möchte mit einem Java-Programm Dateien aus dem Internet downloaden (das funktioniert soweit auch schon). Der downloadlink sieht ca. so aus: site.de/projects/files/download?source=directory
Also in der URL steht der Dateiname nicht, ich bräuchte diese aber zum abspeichern (vorallem ob die Endung .zip oder .tar.gz ist...). Wie kann ich also bei einem Download feststellen, welcher Dateiname normalerweise verwendet wird (der z.B.: dann bei firefox beim Downloaden benutzt wird).
Mein Code sieht ca so aus:

conn = new URL(f.getDownloadUrl()).openConnection();
InputStream in = conn.getInputStream();

Und dann in ner While-Schleife downloaden.

Ist es eine gute Wahl, den Dowload mit Java zu realisieren? (Also wie ich per While Schleife mit InputStream?). Oder sollte ich lieber wget aufrufen und wget den Download überlassen (wegen Fehlerkorrektur und Prüfsummen-überprüfungen?).

2) Nachdem ich mein File downgeloadet habe möchte ich es entpacken. Dazu rufe ich unzip bzw. tar auf.

Process proc = Runtime.getRuntime().exec("unzip -o /home/j/File.zip -d /home/j/");
proc.waitFor();

Prinzipiell funktioniert das auch... Falls ein Fehler auftritt (z.B.: das Archiv beschädigt ist), so gibt er den Fehlercode zurück und macht weiter. Tritt allerdings kein Fehler auf (ein korrektes zip-Archiv) so entpackt er alles (die Dateien sind dann alle vollständig entpackt), er bleibt aber in der .waitFor() Funktion hängen und macht nicht mehr weiter. Hat vielleicht jemand eine Idee warum? (wenn ich den gleichen Befehl händisch per shell eingebe funktioniert es... ohne Benutzerinteraktion).



lg und danke schonmal,
Juggl3r


edit: Naja zumindest aus den Header-Fields kann ich schon den Content-Type auslesen. Aber warum bekomme ich da 3 Verschiedene (x-bzip2, x-gzip, zip) wenn ich nachher nur Dateienungen .zip bzw. .tar.gz habe?)
 
Zuletzt bearbeitet:
J

JohannisderKaeufer

Gast
Zu 2.

Versuche den InputSteam des Prozesses auszulesen. Am besten vor dem Aufruf von waitFor(). Wenn ich mich recht entsinne kann es zu Problemen geben, wenn da noch was im InputStream hängt. Alternativ könnte man auch noch einen Parameter -q oder -qq für den quiet, bzw. quieter mode dranhängen.
 

irgendjemand

Top Contributor
einfach nur URL.openConnection().getInputStream() wird nicht ganz funktionieren da du so auch den HEADER mit in das file schreiben würdest ... diesen musst du erst wegfiltern ...

und dann zum system-call : auch dieser kann vermieden werden da java selbst einige formate unterstützt *Z (compress) , GZ (gzip) , DEFLAT (zip) , PACK200* ... bei BZ *bzip2* wird es schon schwieriger ... aber ich denke das es auch hier ne lib für java gibt ...

zum "hängenbleiben" : da du uns ja schon bewiesen hast das google nicht deine stärke ist *sonst hättest du das mit dem HTTP-header selbst herrausgefunden* als tipp : lies die streams des process ... also getInputStream() und getErrorStream() ...
wenn nämlich dieser buffer volläuft bleibt der sub-process einfach "stehen" bis wieder platz im buffer ist ...

alles in allem ziemlich grundlegendes zeug ...

vielleicht solltest du dich erstmal mit den einzelnen dingen beschäftigen die du für dein "projekt" brauchst und dich dort richtig einarbeiten ... damit du dann am ende alles zusammenfügen kannst ... anstatt von allem nur ein bisschen ahnung zu haben und mit der kombination komplett überfordert bist ...
 

Juggl3r

Mitglied
Danke an euch :)
@irgendjemand: Naja ich hab ca. 20 Files händisch und übers Programm herunter geladen, Ergebnis: Dateigröße ist gleich und md5 Summen stimmen überein, also sollte es eigentlich funktionieren???

Aber ich werd mir das jetzt nochmals genauer ansehen, muss mich wohl entschuldigen, dass ich nicht so intelligent wie du bin und noch bei so grundlegenden Dingen frage (den Source habe ich übrigens 1:1 genau so an mehreren Stellen über google gefunden.). Ich habe auch mehrmals per google gesucht wie man beim Downloaden den Dateinamen rausfindet (aber nirgends eine Lösung gefunden), allerdings überall den gleichen Download-Code...

Zum zweiten... Danke euch, werd mir das nun näher ansehen :)

edit: naja das mit selbst im Java-Programm dekomprimieren muss ich mir erst ansehen... ich glaube ich hab da viel mehr verschiedene Formate und das könnte ein wenig mühsam werden alle selbst zu supporten...
Das Programm muss ja nicht perfekt werden, ist eher so ne kurze Idee, hauptsache es funktioniert, ob das Programm jetzt 5 Tage läuft oder 10 Tage ist mir im Prinzip wurscht, hauptsache es macht, was es soll :)
 
Zuletzt bearbeitet:

irgendjemand

Top Contributor
@TO
da fast alles was URL.openConnection() angeht abstract ist und über factories arbeitet ... ist nicht ersichtlich OB , und wenn ja WO die header in einer HttpURLConnection weggefiltert werden ...
im source steht jedenfalls nichts davon ...

man könnte jetzt spekulieren das durch den fakt das HttpURLConnection den header liest dieser dann aus dem InputStream bzw dessen buffer/stack bereits fehlt wenn man getInputStream callt ... aber sicher sollte man sich dabei nicht sein ...

das ist auch einer der gründe warum ich diesen schwachsinn noch nie genutzt hab ... weils halt nich komplett offen liegt und deutlich zu komplex ist ...

einfacher ist hier wirklich mit Socket und InputStream dierekt zu arbeiten ... dann weis man wenigstens was man liest und kanns entsprechend selbst filtern ..

MD5 ? oh graus ... nimm die finger weg ... wenn überhaupt sollte man heutzutage mit mindestens SHA-256 hashen ... wobei ich persönlich SHA-512 empfehle ...

grundsätzlich zu den system-calls : würde ich versuchen zu vermeiden ... ansonsten ist es nicht mehr plattformunabhängig ...
da ist es immer noch sauberer entsprechende libs zu verwenden ...
da alles am ende auf einen InputStream zurück geht kann man diese sogar 100% in java selbst implementieren und so die plattformunabhängigkeit bewahren ...

und deine ironie kannst du dir auch klemmen ... ich muss mich hier nicht verschaukeln lassen ...
es ist halt nun mal fakt das ich scheinbar mehr erfahrung habe als du und entsprechend so denke ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Tobero Download .jar von github lädt kaputte Datei runter Allgemeine Java-Themen 3
P Input/Output entfernte Datei mit Java öffnen ohne Download Allgemeine Java-Themen 5
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
B Download von dateien Allgemeine Java-Themen 2
OnDemand Download Textdatei falsches Charset Allgemeine Java-Themen 1
OnDemand FTP Download Charset Allgemeine Java-Themen 1
HarleyDavidson Input/Output Heruntergeladene Datei direkt nach dem Download öffnen ohne zu speichern Allgemeine Java-Themen 1
J Java Progressbar & Download Probleme Allgemeine Java-Themen 10
J Java Download Filedownload File.getFileName Allgemeine Java-Themen 3
J Java JSON-Datei aus .Zip auslesen und Download mit Progress Bar Allgemeine Java-Themen 20
B Download und Öffnen einer Datei mit Java Allgemeine Java-Themen 6
H Pic Download / Regex Problem Allgemeine Java-Themen 7
E Aktienkurs Download API? Allgemeine Java-Themen 2
J Java Communications 3.0 API Download ? Allgemeine Java-Themen 18
T HTTP Skript für Passwortgeschützte Seite :: Häkchen setzen und Download Allgemeine Java-Themen 4
W Java download Allgemeine Java-Themen 4
I URLConnection Upload/Download Allgemeine Java-Themen 3
T Firefox und Webstart: Ohne JNLP Download Allgemeine Java-Themen 2
E Performance website download Allgemeine Java-Themen 13
MQue FTP Verbindung download Allgemeine Java-Themen 5
X Will JAR Datei zum Download anbieten, worauf muss ich rechtlich achten? Allgemeine Java-Themen 2
hdi [Free Download] Film-Datenbank Allgemeine Java-Themen 30
Benji0815 DOWNLOAD von Dateien Allgemeine Java-Themen 2
B maven 2 error bei plugin download Allgemeine Java-Themen 7
J WebBrowser Java Programm Download, Ausführen? Allgemeine Java-Themen 2
A JRE auf eigener Seite verlinken oder zum Download anbieten? Allgemeine Java-Themen 13
M Datei download mit versteckter URL Allgemeine Java-Themen 3
W JNI - C API ? Download ? Allgemeine Java-Themen 3
M Download Covers Allgemeine Java-Themen 2
T Soll ich meine Software als freeware zum download geben? Allgemeine Java-Themen 15
M deutsche Dokumentation zum Download? Allgemeine Java-Themen 7
C Download von Bildern etc. realisieren Allgemeine Java-Themen 2
Kirby.exe Filename nach bestimmtem Pattern durchsuchen Allgemeine Java-Themen 5
G mail body parsen (->attachment & filename) Allgemeine Java-Themen 2
D Compiler-Fehler child process exited with code 1 Allgemeine Java-Themen 1
K Threads Runtime und Process Probleme Allgemeine Java-Themen 3
P Herausfinden, ob ein Process ein Fenster hat Allgemeine Java-Themen 1
D Java Process OutputStream ist null Allgemeine Java-Themen 4
X Problem bei process.start() ExitValue Allgemeine Java-Themen 5
T Mit Java auf die Konsole eines Process-Objekts zugreifen Allgemeine Java-Themen 10
P Input/Output Process.getErrorStream = OutputStream Allgemeine Java-Themen 11
S Wie beendet man einen Process in Java Platform unabhänging? Allgemeine Java-Themen 8
M Process wird gestoppt und nach beenden der Anwendung fortgeführt Allgemeine Java-Themen 4
G Process.destory() == CTRL+C Allgemeine Java-Themen 2
P Swing GUI Process anzeigen Allgemeine Java-Themen 10
F Process.getInputStream unter Linux Allgemeine Java-Themen 7
schlingel Process - Ausgabe leer Allgemeine Java-Themen 5
G ungepufferter Process.getInputStream Allgemeine Java-Themen 10
J Process beenden ...aber wie ? Allgemeine Java-Themen 19
G Process - mehrere Commands?! Allgemeine Java-Themen 2
MQue auf gestarteten Process warten Allgemeine Java-Themen 7
G Process.wait() auf Folgeprozesse mitwarten Allgemeine Java-Themen 29
P Bedeutung der Process.exitValue() Werte? Allgemeine Java-Themen 3
J Process auf Console anzeigen lassen. Allgemeine Java-Themen 5
S Process - Befehle senden Allgemeine Java-Themen 13
B Process Builder Allgemeine Java-Themen 10
D Thread & Process: Beenden einer Batch-Datei Allgemeine Java-Themen 8
J process.getInputStream() hängt auf merkwürdige Art und Weise Allgemeine Java-Themen 7
D Fremdes Programm schließen (ohne process.destroy()) Allgemeine Java-Themen 8
S process.waitFor() endet mit -1 Allgemeine Java-Themen 3
M Process -> getInputStream -> nur gepuffert ? Allgemeine Java-Themen 12
A Runtime Process bricht nicht ab! Allgemeine Java-Themen 7
C Process output Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben