Hallo, ich möchte ein Programm schreiben, welches Dateien aus dem Internet runterläd.
Den Quellcode unten habe ich gefunden und nicht selber geschrieben.
Mein Problem ist nun, dass Fileoutputstream nach einem verzeichnis + Dateinamen verlangt.
Da die Dateien die ich rutnerladen will Teil eines RAR Archives sind, kann ich die Dateien nicht willkürlich benennen. Mit dem Link zu der Datei, wird aber nicht der Dateiname ersichtlich.
Ein Link sieht z.B. so aus:
http://runterladen.de/e9b0e42ae80a22dfe6d43a9ab071c0f654be9a
Gibt es eine Möglichkeit den Dateinamen zu ermitteln?
Den Quellcode unten habe ich gefunden und nicht selber geschrieben.
Mein Problem ist nun, dass Fileoutputstream nach einem verzeichnis + Dateinamen verlangt.
Da die Dateien die ich rutnerladen will Teil eines RAR Archives sind, kann ich die Dateien nicht willkürlich benennen. Mit dem Link zu der Datei, wird aber nicht der Dateiname ersichtlich.
Ein Link sieht z.B. so aus:
http://runterladen.de/e9b0e42ae80a22dfe6d43a9ab071c0f654be9a
Gibt es eine Möglichkeit den Dateinamen zu ermitteln?
Java:
public class Downloader {
public static void downloadFile(String url_str, OutputStream os)
throws IllegalStateException, MalformedURLException,
ProtocolException, IOException {
URL url = new URL(url_str.replace(" ", "%20"));
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.connect();
int responseCode = conn.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
byte tmp_buffer[] = new byte[4096];
InputStream is = conn.getInputStream();
int n;
while ((n = is.read(tmp_buffer)) > 0) {
os.write(tmp_buffer, 0, n);
os.flush();
}
} else {
throw new IllegalStateException("HTTP response: " + responseCode);
}
}
public static void main(String[] args) {
try {
final String url = "http://www.test.de/vb3/images/element/misc/logo_blue.gif";
FileOutputStream fos = new FileOutputStream(System
.getProperty("user.home")
+ File.separator + "logo.gif");
downloadFile(url, fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}