diff --git a/src/main/java/cz/adamh/utils/NativeUtils.java b/src/main/java/cz/adamh/utils/NativeUtils.java index b92c190..edf5cc2 100644 --- a/src/main/java/cz/adamh/utils/NativeUtils.java +++ b/src/main/java/cz/adamh/utils/NativeUtils.java @@ -32,19 +32,20 @@ import java.nio.file.StandardCopyOption; /** * A simple library class which helps with loading dynamic libraries stored in the - * JAR archive. These libraries usualy contain implementation of some methods in + * JAR archive. These libraries usually contain implementation of some methods in * native code (using JNI - Java Native Interface). - * - * @see http://adamheinrich.com/blog/2012/how-to-load-native-jni-library-from-jar - * @see https://github.com/adamheinrich/native-utils + * + * @see http://adamheinrich.com/blog/2012/how-to-load-native-jni-library-from-jar + * @see https://github.com/adamheinrich/native-utils * */ public class NativeUtils { - + /** * The minimum length a prefix for a file has to have according to {@link File#createTempFile(String, String)}}. */ private static final int MIN_PREFIX_LENGTH = 3; + public static final String NATIVE_FOLDER_PATH_PREFIX = "nativeutils"; /** * Temporary directory which will contain the DLLs. @@ -59,11 +60,11 @@ public class NativeUtils { /** * Loads library from current JAR archive - * + * * The file from JAR is copied into system temporary directory and then loaded. The temporary file is deleted after * exiting. * Method uses String as filename because the pathname is "abstract", not system-dependent. - * + * * @param path The path of file inside JAR as absolute path (beginning with '/'), e.g. /package/File.ext * @throws IOException If temporary file creation or read/write operation fails * @throws IllegalArgumentException If source file (param path) does not exist @@ -72,23 +73,23 @@ public class NativeUtils { * @throws FileNotFoundException If the file could not be found inside the JAR. */ public static void loadLibraryFromJar(String path) throws IOException { - - if (!path.startsWith("/")) { + + if (null == path || !path.startsWith("/")) { throw new IllegalArgumentException("The path has to be absolute (start with '/')."); } - + // Obtain filename from path String[] parts = path.split("/"); String filename = (parts.length > 1) ? parts[parts.length - 1] : null; - + // Check if the filename is okay if (filename == null || filename.length() < MIN_PREFIX_LENGTH) { throw new IllegalArgumentException("The filename has to be at least 3 characters long."); } - + // Prepare temporary file if (temporaryDir == null) { - temporaryDir = createTempDirectory("nativeutils"); + temporaryDir = createTempDirectory(NATIVE_FOLDER_PATH_PREFIX); temporaryDir.deleteOnExit(); } @@ -96,9 +97,6 @@ public class NativeUtils { try (InputStream is = NativeUtils.class.getResourceAsStream(path)) { Files.copy(is, temp.toPath(), StandardCopyOption.REPLACE_EXISTING); - } catch (IOException e) { - temp.delete(); - throw e; } catch (NullPointerException e) { temp.delete(); throw new FileNotFoundException("File " + path + " was not found inside JAR."); @@ -119,27 +117,23 @@ public class NativeUtils { private static boolean isPosixCompliant() { try { - if (FileSystems.getDefault() + return FileSystems.getDefault() .supportedFileAttributeViews() - .contains("posix")) { - return true; - } - return false; + .contains("posix"); } catch (FileSystemNotFoundException | ProviderNotFoundException | SecurityException e) { return false; } } - - private static File createTempDirectory(String prefix) throws IOException - { + + private static File createTempDirectory(String prefix) throws IOException { String tempDir = System.getProperty("java.io.tmpdir"); File generatedDir = new File(tempDir, prefix + System.nanoTime()); - + if (!generatedDir.mkdir()) throw new IOException("Failed to create temp directory " + generatedDir.getName()); - + return generatedDir; } }