import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
/**
* Created by luopiao on 17-2-28.
*/
public abstract class ResourceUtils {
private static final Logger logger = LoggerFactory.getLogger(ResourceUtils.class);
public static final String CLASSPATH_URL_PREFIX = "classpath:";
public static final String URL_PROTOCOL_FILE = "file";
/**
* URL protocol for an entry from a jar file: "jar"
*/
public static final String URL_PROTOCOL_JAR = "jar";
/**
* URL protocol for an entry from a zip file: "zip"
*/
public static final String URL_PROTOCOL_ZIP = "zip";
/**
* URL protocol for an entry from a WebSphere jar file: "wsjar"
*/
public static final String URL_PROTOCOL_WSJAR = "wsjar";
/**
* URL protocol for an entry from a JBoss jar file: "vfszip"
*/
public static final String URL_PROTOCOL_VFSZIP = "vfszip";
/**
* URL protocol for a JBoss file system resource: "vfsfile"
*/
public static final String URL_PROTOCOL_VFSFILE = "vfsfile";
/**
* URL protocol for a general JBoss VFS resource: "vfs"
*/
public static final String URL_PROTOCOL_VFS = "vfs";
/**
* File extension for a regular jar file: ".jar"
*/
public static final String JAR_FILE_EXTENSION = ".jar";
public static boolean isUrl(String resourceLocation) {
if (resourceLocation == null) {
return false;
}
if (resourceLocation.startsWith(CLASSPATH_URL_PREFIX)) {
return true;
}
try {
new URL(resourceLocation);
return true;
} catch (MalformedURLException ex) {
return false;
}
}
public static URL getURL(String resourceLocation) {
if (resourceLocation.startsWith(CLASSPATH_URL_PREFIX)) {
String path = resourceLocation.substring(CLASSPATH_URL_PREFIX.length());
ClassLoader cl = ClassUtils.getDefaultClassLoader();
URL url = (cl != null ? cl.getResource(path) : ClassLoader.getSystemResource(path));
if (url == null) {
String description = "class path resource [" + path + "]";
throw new RuntimeException(description + " cannot be resolved to URL because it does not exist");
}
return url;
}
try {
// try URL
return new URL(resourceLocation);
} catch (MalformedURLException ex) {
logger.debug("no URL -> treat as file path");
try {
return new File(resourceLocation).toURI().toURL();
} catch (MalformedURLException ex2) {
throw new RuntimeException("Resource location [" + resourceLocation + "] is neither a URL not a well-formed file path");
}
}
}
public static File getFile(String resourceLocation) {
if (resourceLocation.startsWith(CLASSPATH_URL_PREFIX)) {
String path = resourceLocation.substring(CLASSPATH_URL_PREFIX.length());
String description = "class path resource [" + path + "]";
ClassLoader cl = ClassUtils.getDefaultClassLoader();
URL url = (cl != null ? cl.getResource(path) : ClassLoader.getSystemResource(path));
if (url == null) {
throw new RuntimeException(description +
" cannot be resolved to absolute file path because it does not exist");
}
return getFile(url, description);
}
try {
// try URL
return getFile(new URL(resourceLocation));
} catch (MalformedURLException ex) {
// no URL -> treat as file path
return new File(resourceLocation);
}
}
public static File getFile(URL resourceUrl) {
return getFile(resourceUrl, "URL");
}
public static File getFile(URL resourceUrl, String description) {
if (!URL_PROTOCOL_FILE.equals(resourceUrl.getProtocol())) {
throw new RuntimeException(description + " cannot be resolved to absolute file path " + "because it does not reside in the file system: " + resourceUrl);
}
try {
return new File(toURI(resourceUrl).getSchemeSpecificPart());
} catch (Exception ex) {
// Fallback for URLs that are not valid URIs (should hardly ever happen).
return new File(resourceUrl.getFile());
}
}
/**
* 判断url 是否是jar 路径
*
* @param url url
* @return 是否是jar 路径
*/
public static boolean isJarURL(URL url) {
String protocol = url.getProtocol();
return (URL_PROTOCOL_JAR.equals(protocol) || URL_PROTOCOL_ZIP.equals(protocol) ||
URL_PROTOCOL_VFSZIP.equals(protocol) || URL_PROTOCOL_WSJAR.equals(protocol));
}
public static boolean isJarFileURL(URL url) {
return (URL_PROTOCOL_FILE.equals(url.getProtocol()) &&
url.getPath().toLowerCase().endsWith(JAR_FILE_EXTENSION));
}
public static boolean isFileURL(URL url) {
String protocol = url.getProtocol();
return (URL_PROTOCOL_FILE.equals(protocol) || URL_PROTOCOL_VFSFILE.equals(protocol) ||
URL_PROTOCOL_VFS.equals(protocol));
}
public static URI toURI(URL url) {
return toURI(url.toString());
}
public static URI toURI(String location) {
try {
return new URI(StringUtils.replace(location, " ", "%20"));
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}
/**
* 读取配置文件
*
* @param path 文件路径
* @return 返回 Properties
*/
public static Properties readProperties(String path) {
Properties config = new Properties();
try (InputStreamReader in = new InputStreamReader(getURL(path).openStream(), StandardCharsets.UTF_8.name())) {
config.load(in);
} catch (Exception e) {
logger.warn("缺少 {} 文件", path);
}
return config;
}
/**
* 检查文件时候存在
*
* @param resourceLocation 文件路径
* @return 是否存在
*/
public static boolean existsResource(String resourceLocation) {
try {
getURL(resourceLocation);
return true;
} catch (Exception e) {
return false;
}
}
}
08-29
08-29
1056
1056

被折叠的 条评论
为什么被折叠?



