104 lines
3.6 KiB
Java
104 lines
3.6 KiB
Java
package com.baeldung.logreg;
|
|
|
|
import java.io.BufferedInputStream;
|
|
import java.io.BufferedOutputStream;
|
|
import java.io.File;
|
|
import java.io.FileInputStream;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
|
|
import org.apache.commons.compress.archivers.ArchiveEntry;
|
|
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
|
|
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
|
|
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
|
|
import org.apache.http.HttpEntity;
|
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
|
import org.apache.http.client.methods.HttpGet;
|
|
import org.apache.http.impl.client.CloseableHttpClient;
|
|
import org.apache.http.impl.client.HttpClientBuilder;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
/**
|
|
* Utility class for digit classifier.
|
|
*
|
|
*/
|
|
public class Utils {
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(Utils.class);
|
|
|
|
private Utils() {
|
|
}
|
|
|
|
/**
|
|
* Download the content of the given url and save it into a file.
|
|
* @param url
|
|
* @param file
|
|
*/
|
|
public static void downloadAndSave(String url, File file) throws IOException {
|
|
CloseableHttpClient client = HttpClientBuilder.create()
|
|
.build();
|
|
logger.info("Connecting to {}", url);
|
|
try (CloseableHttpResponse response = client.execute(new HttpGet(url))) {
|
|
HttpEntity entity = response.getEntity();
|
|
if (entity != null) {
|
|
logger.info("Downloaded {} bytes", entity.getContentLength());
|
|
try (FileOutputStream outstream = new FileOutputStream(file)) {
|
|
logger.info("Saving to the local file");
|
|
entity.writeTo(outstream);
|
|
outstream.flush();
|
|
logger.info("Local file saved");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Extract a "tar.gz" file into a given folder.
|
|
* @param file
|
|
* @param folder
|
|
*/
|
|
public static void extractTarArchive(File file, String folder) throws IOException {
|
|
logger.info("Extracting archive {} into folder {}", file.getName(), folder);
|
|
// @formatter:off
|
|
try (FileInputStream fis = new FileInputStream(file);
|
|
BufferedInputStream bis = new BufferedInputStream(fis);
|
|
GzipCompressorInputStream gzip = new GzipCompressorInputStream(bis);
|
|
TarArchiveInputStream tar = new TarArchiveInputStream(gzip)) {
|
|
// @formatter:on
|
|
TarArchiveEntry entry;
|
|
while ((entry = (TarArchiveEntry) tar.getNextEntry()) != null) {
|
|
extractEntry(entry, tar, folder);
|
|
}
|
|
}
|
|
logger.info("Archive extracted");
|
|
}
|
|
|
|
/**
|
|
* Extract an entry of the input stream into a given folder
|
|
* @param entry
|
|
* @param tar
|
|
* @param folder
|
|
* @throws IOException
|
|
*/
|
|
public static void extractEntry(ArchiveEntry entry, InputStream tar, String folder) throws IOException {
|
|
final int bufferSize = 4096;
|
|
final String path = folder + entry.getName();
|
|
if (entry.isDirectory()) {
|
|
new File(path).mkdirs();
|
|
} else {
|
|
int count;
|
|
byte[] data = new byte[bufferSize];
|
|
// @formatter:off
|
|
try (FileOutputStream os = new FileOutputStream(path);
|
|
BufferedOutputStream dest = new BufferedOutputStream(os, bufferSize)) {
|
|
// @formatter:off
|
|
while ((count = tar.read(data, 0, bufferSize)) != -1) {
|
|
dest.write(data, 0, count);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|