Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static {
- try {
- System.loadLibrary("crypt"); // used for tests. This library in classpath only
- } catch (UnsatisfiedLinkError e) {
- try {
- NativeUtils.loadLibraryFromJar("/natives/crypt.dll"); // during runtime. .DLL within .JAR
- } catch (IOException e1) {
- throw new RuntimeException(e1);
- }
- }
- }
- import java.io.Closeable;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.io.UnsupportedEncodingException;
- import java.net.URI;
- import java.net.URISyntaxException;
- import java.net.URL;
- import java.net.URLDecoder;
- import java.security.CodeSource;
- import java.security.ProtectionDomain;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipException;
- import java.util.zip.ZipFile;
- public class FileUtils
- {
- public static String getFileName(final Class<?> owner,
- final String name)
- throws URISyntaxException,
- ZipException,
- IOException
- {
- String fileName;
- final URI uri;
- try
- {
- final String external;
- final String decoded;
- final int pos;
- uri = getResourceAsURI(owner.getPackage().getName().replaceAll("\.", "/") + "/" + name, owner);
- external = uri.toURL().toExternalForm();
- decoded = external; // URLDecoder.decode(external, "UTF-8");
- pos = decoded.indexOf(":/");
- fileName = decoded.substring(pos + 1);
- }
- catch(final FileNotFoundException ex)
- {
- fileName = null;
- }
- if(fileName == null || !(new File(fileName).exists()))
- {
- fileName = getFileNameX(owner, name);
- }
- return (fileName);
- }
- private static String getFileNameX(final Class<?> clazz, final String name)
- throws UnsupportedEncodingException
- {
- final URL url;
- final String fileName;
- url = clazz.getResource(name);
- if(url == null)
- {
- fileName = name;
- }
- else
- {
- final String decoded;
- final int pos;
- decoded = URLDecoder.decode(url.toExternalForm(), "UTF-8");
- pos = decoded.indexOf(":/");
- fileName = decoded.substring(pos + 1);
- }
- return (fileName);
- }
- private static URI getResourceAsURI(final String resourceName,
- final Class<?> clazz)
- throws URISyntaxException,
- ZipException,
- IOException
- {
- final URI uri;
- final URI resourceURI;
- uri = getJarURI(clazz);
- resourceURI = getFile(uri, resourceName);
- return (resourceURI);
- }
- private static URI getJarURI(final Class<?> clazz)
- throws URISyntaxException
- {
- final ProtectionDomain domain;
- final CodeSource source;
- final URL url;
- final URI uri;
- domain = clazz.getProtectionDomain();
- source = domain.getCodeSource();
- url = source.getLocation();
- uri = url.toURI();
- return (uri);
- }
- private static URI getFile(final URI where,
- final String fileName)
- throws ZipException,
- IOException
- {
- final File location;
- final URI fileURI;
- location = new File(where);
- // not in a JAR, just return the path on disk
- if(location.isDirectory())
- {
- fileURI = URI.create(where.toString() + fileName);
- }
- else
- {
- final ZipFile zipFile;
- zipFile = new ZipFile(location);
- try
- {
- fileURI = extract(zipFile, fileName);
- }
- finally
- {
- zipFile.close();
- }
- }
- return (fileURI);
- }
- private static URI extract(final ZipFile zipFile,
- final String fileName)
- throws IOException
- {
- final File tempFile;
- final ZipEntry entry;
- final InputStream zipStream;
- OutputStream fileStream;
- tempFile = File.createTempFile(fileName.replace("/", ""), Long.toString(System.currentTimeMillis()));
- tempFile.deleteOnExit();
- entry = zipFile.getEntry(fileName);
- if(entry == null)
- {
- throw new FileNotFoundException("cannot find file: " + fileName + " in archive: " + zipFile.getName());
- }
- zipStream = zipFile.getInputStream(entry);
- fileStream = null;
- try
- {
- final byte[] buf;
- int i;
- fileStream = new FileOutputStream(tempFile);
- buf = new byte[1024];
- i = 0;
- while((i = zipStream.read(buf)) != -1)
- {
- fileStream.write(buf, 0, i);
- }
- }
- finally
- {
- close(zipStream);
- close(fileStream);
- }
- return (tempFile.toURI());
- }
- private static void close(final Closeable stream)
- {
- if(stream != null)
- {
- try
- {
- stream.close();
- }
- catch(final IOException ex)
- {
- ex.printStackTrace();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement