filebot/source/net/filebot/archive/SevenZipLoader.java

42 lines
1.4 KiB
Java

package net.filebot.archive;
import net.sf.sevenzipjbinding.IArchiveOpenCallback;
import net.sf.sevenzipjbinding.IInArchive;
import net.sf.sevenzipjbinding.IInStream;
import net.sf.sevenzipjbinding.SevenZip;
import net.sf.sevenzipjbinding.SevenZipException;
import net.sf.sevenzipjbinding.SevenZipNativeInitializationException;
public class SevenZipLoader {
private static boolean nativeLibrariesLoaded = false;
private static synchronized void requireNativeLibraries() throws SevenZipNativeInitializationException {
if (nativeLibrariesLoaded) {
return;
}
// initialize 7z-JBinding native libs
try {
System.loadLibrary("7-Zip-JBinding");
SevenZip.initLoadedLibraries(); // NATIVE LIBS MUST BE LOADED WITH SYSTEM CLASSLOADER
nativeLibrariesLoaded = true;
} catch (Throwable e) {
throw new SevenZipNativeInitializationException("Failed to load 7z-JBinding: " + e.getMessage(), e);
}
}
public static String getNativeVersion() throws SevenZipNativeInitializationException {
requireNativeLibraries();
return SevenZip.getSevenZipVersion().version;
}
public static IInArchive open(IInStream stream, IArchiveOpenCallback callback) throws SevenZipException, SevenZipNativeInitializationException {
requireNativeLibraries();
return (callback == null) ? SevenZip.openInArchive(null, stream) : SevenZip.openInArchive(null, stream, callback);
}
}