static void loadBinaryPageToFile(S url, File file) ctex { print("Loading " + url); loadBinaryPageToFile(openConnection(new URL(url)), file); } static void loadBinaryPageToFile(URLConnection con, File file) ctex { setHeaders(con); loadBinaryPageToFile_noHeaders(con, file); } static void loadBinaryPageToFile_noHeaders(URLConnection con, File file) ctex { File ftemp = new File(f2s(file) + "_temp"); FileOutputStream buf = newFileOutputStream(mkdirsFor(ftemp)); InputStream inputStream = con.getInputStream(); try { long len = 0; try { len = con.getContentLengthLong(); } catch (Throwable e) { printStackTrace(e); } int n = 0; while (true) { int ch = inputStream.read(); if (ch < 0) break; buf.write(ch); if (++n % 100000 == 0) println(" " + n + (len != 0 ? "/" + len : "") + " bytes loaded."); } buf.close(); buf = null; file.delete(); ftemp.renameTo(file); inputStream.close(); } finally { if (buf != null) buf.close(); } }