From 0a873de58b606b820c7ae45f5c652527ffb0dabe Mon Sep 17 00:00:00 2001 From: ice shui Date: Wed, 4 Apr 2018 03:13:54 +0800 Subject: [PATCH 1/2] refactor code and delete unnecessary catch statement --- src/main/java/cz/adamh/utils/NativeUtils.java | 46 ++++++++----------- 1 file changed, 20 insertions(+), 26 deletions(-) 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; } } From e6ea34b98e433bc67f2ad82a69f8f023d764e846 Mon Sep 17 00:00:00 2001 From: ice shui Date: Thu, 5 Apr 2018 16:52:05 +0800 Subject: [PATCH 2/2] add catch statement --- src/main/java/cz/adamh/utils/NativeUtils.java | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/java/cz/adamh/utils/NativeUtils.java b/src/main/java/cz/adamh/utils/NativeUtils.java index edf5cc2..0ee4c3e 100644 --- a/src/main/java/cz/adamh/utils/NativeUtils.java +++ b/src/main/java/cz/adamh/utils/NativeUtils.java @@ -34,13 +34,13 @@ import java.nio.file.StandardCopyOption; * A simple library class which helps with loading dynamic libraries stored in the * 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 * */ public class NativeUtils { - + /** * The minimum length a prefix for a file has to have according to {@link File#createTempFile(String, String)}}. */ @@ -60,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 @@ -73,20 +73,20 @@ public class NativeUtils { * @throws FileNotFoundException If the file could not be found inside the JAR. */ public static void loadLibraryFromJar(String path) throws IOException { - + 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(NATIVE_FOLDER_PATH_PREFIX); @@ -97,6 +97,9 @@ 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."); @@ -130,10 +133,10 @@ public class NativeUtils { 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; } }