package org.ovirt.engine.api.common.util;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;
public class FileUtils {
/**
* Locates specified file in given package
*
* @param packageName
* @param fileName
* @throws IOException
* @return InputStream
*/
public static InputStream get(String packageName, String fileName) throws IOException {
JarEntry jarEntry;
String path = packageName.replace('.', '/');
List<URL> dirs = ReflectionHelper.getDirectories(path);
ClassLoader loader = URLClassLoader.newInstance(dirs.toArray(new URL[0]),
Thread.currentThread().getContextClassLoader());
for (URL directory : dirs) {
String resource = directory.getPath().replace("/"+path+"/", "");
if (resource.endsWith(".jar")) {
JarInputStream jarFileInputStream = new JarInputStream(new FileInputStream(resource));
while (true) {
jarEntry = jarFileInputStream.getNextJarEntry();
if (jarEntry == null) break;
if (jarEntry.getName().equals(fileName)) {
InputStream str = loader.getResourceAsStream(loader.getResource(jarEntry.getName()).getFile());
if (str != null) return str;
}
}
}
}
return null;
}
}