mirror of https://github.com/bvn13/covid19-ru.git
74 lines
2.3 KiB
Java
74 lines
2.3 KiB
Java
package com.bvn13.covid19.scheduler;
|
|
|
|
import java.io.*;
|
|
import java.util.Hashtable;
|
|
|
|
/**
|
|
* @see 'https://coderwall.com/p/d0kssw/resource-extraction-from-jar-to-local-file-system'
|
|
*/
|
|
public class ResourceManager {
|
|
|
|
// Stores paths to files with the global jarFilePath as the key
|
|
private static Hashtable<String, String> fileCache = new Hashtable<String, String>();
|
|
|
|
/**
|
|
* Extract the specified resource from inside the jar to the local file system.
|
|
* @param jarFilePath absolute path to the resource
|
|
* @return full file system path if file successfully extracted, else null on error
|
|
*/
|
|
public static String extract(String jarFilePath){
|
|
|
|
if(jarFilePath == null)
|
|
return null;
|
|
|
|
// See if we already have the file
|
|
if(fileCache.contains(jarFilePath))
|
|
return fileCache.get(jarFilePath);
|
|
|
|
// Alright, we don't have the file, let's extract it
|
|
try {
|
|
// Read the file we're looking for
|
|
InputStream fileStream = ResourceManager.class.getResourceAsStream(jarFilePath);
|
|
|
|
// Was the resource found?
|
|
if(fileStream == null)
|
|
return null;
|
|
|
|
// Grab the file name
|
|
String[] chopped = jarFilePath.split("\\/");
|
|
String fileName = chopped[chopped.length-1];
|
|
|
|
// Create our temp file (first param is just random bits)
|
|
File tempFile = File.createTempFile("covid19-", fileName);
|
|
|
|
// Set this file to be deleted on VM exit
|
|
tempFile.deleteOnExit();
|
|
|
|
// Create an output stream to barf to the temp file
|
|
OutputStream out = new FileOutputStream(tempFile);
|
|
|
|
// Write the file to the temp file
|
|
byte[] buffer = new byte[1024];
|
|
int len = fileStream.read(buffer);
|
|
while (len != -1) {
|
|
out.write(buffer, 0, len);
|
|
len = fileStream.read(buffer);
|
|
}
|
|
|
|
// Store this file in the cache list
|
|
fileCache.put(jarFilePath, tempFile.getAbsolutePath());
|
|
|
|
// Close the streams
|
|
fileStream.close();
|
|
out.close();
|
|
|
|
// Return the path of this sweet new file
|
|
return tempFile.getAbsolutePath();
|
|
|
|
} catch (IOException e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
}
|