Weiß jemand, wie man Datei vom Internet unter Verwendung der URL (http://.../File.mp4) herunterlädt? Ich versuche NIO zu verwenden, aber der Stream endet immer bei Integer.MAX_VALUE. Meine Datei ist 2,5 GB.Java - Wie man eine Datei von der URL herunterlädt, größer als Integer.MAX_VALUE
Mein Code:
String url = "http://.../Somefile.mp4";
String filename = "Path/to/file/Something.mp4";
boolean koncano = false;
URLConnection conn = new URL(url).openConnection();
conn.setRequestProperty("Range", "bytes=" + new File(filename).length() + "-");
ReadableByteChannel rbc = Channels.newChannel(conn.getInputStream());
long remain = conn.getContentLength();
FileOutputStream fos = new FileOutputStream(filename, true);
while (!koncano) {
long downloaded = new File(filename).length();
long buffer = (remain > 65536) ? 1 << 16 : remain;
while (remain > 0) {
long write = fos.getChannel().transferFrom(rbc, downloaded, buffer);
downloaded += write;
remain -= write;
if (write == 0) {
break;
}
}
if (remain <= 0) {
System.out.println("File is complete");
rbc.close();
fos.close();
koncano = true;
}
}
Willkommen bei Stack Overflow! Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein spezifisches Problem oder einen Fehler und den kürzesten Code enthalten, der für die Reproduktion in der Frage erforderlich ist. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: Erstellen eines [mcve]. Verwenden Sie den Link "Bearbeiten", um Ihre * Frage * zu verbessern - fügen Sie keine weiteren Informationen über Kommentare hinzu. Vielen Dank! – GhostCat
Nicht auf eine externe Seite verlinken - Beispielcode hier angeben, innerhalb Ihrer Frage! – GhostCat
Ich vermute, dass Sie eine 'HttpURLConnection' oder etw. Verwenden. ähnlich, die einen 'ByteArrayInputStream' verwendet. Dies wiederum verwendet ein Byte [] 'und Java-Arrays haben eine maximale Länge von" Integer.MAX_VALUE ". – Thomas