Launcher/libLauncher/src/main/java/ru/gravit/utils/HttpDownloader.java

73 lines
2.4 KiB
Java
Raw Normal View History

2018-09-19 17:37:12 +03:00
package ru.gravit.utils;
import ru.gravit.utils.helper.IOHelper;
import ru.gravit.utils.helper.LogHelper;
import java.io.BufferedInputStream;
2018-09-19 17:37:12 +03:00
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Path;
import java.util.Observable;
import java.util.concurrent.atomic.AtomicInteger;
2018-09-19 17:37:12 +03:00
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class HttpDownloader extends Observable {
public static final int BUFER_SIZE = 8192;
public static final int INTERVAL = 300;
public AtomicInteger writed = new AtomicInteger(0);
private String filename;
public Thread thread;
public HttpDownloader(URL url, String file) {
Runnable run = () -> {
try {
filename = file;
downloadFile(url, file);
} catch (IOException e) {
e.printStackTrace();
}
};
Thread downloader = new Thread(run);
thread = downloader;
downloader.start();
}
public synchronized String getFilename()
{
return filename;
}
public void downloadFile(URL url, String file) throws IOException {
try (BufferedInputStream in = new BufferedInputStream(url.openStream()); FileOutputStream fout = new FileOutputStream(file)) {
final byte data[] = new byte[BUFER_SIZE];
int count;
long timestamp = System.currentTimeMillis();
int writed_local = 0;
while ((count = in.read(data, 0, BUFER_SIZE)) != -1) {
fout.write(data, 0, count);
writed_local+=count;
if(System.currentTimeMillis() - timestamp > INTERVAL) {
writed.set(writed_local);
LogHelper.debug("Downloaded %d",writed_local);
}
}
writed.set(writed_local);
2018-09-19 17:37:12 +03:00
}
}
public static void downloadZip(URL url, Path dir) throws IOException {
try (ZipInputStream input = IOHelper.newZipInput(url)) {
for (ZipEntry entry = input.getNextEntry(); entry != null; entry = input.getNextEntry()) {
if (entry.isDirectory())
continue; // Skip directories
// Unpack entry
String name = entry.getName();
LogHelper.subInfo("Downloading file: '%s'", name);
IOHelper.transfer(input, dir.resolve(IOHelper.toPath(name)));
}
}
}
}