JNotepad/src/main/java/org/jcnc/jnotepad/util/ResourceUtil.java
2023-10-10 14:07:44 +08:00

71 lines
2.1 KiB
Java

package org.jcnc.jnotepad.util;
import org.jcnc.jnotepad.JnotepadApp;
import java.io.InputStream;
import java.net.URI;
import java.net.URL;
import java.util.Objects;
/**
* 资源工具
*
* @author gewuyou
*/
public class ResourceUtil {
public static final String MODULE_DIR = "/jcnc/app/";
private ResourceUtil() {
}
/**
* Retrieves an input stream for the specified resource.
*
* @param resource the path to the resource
* @return the input stream for the resource
*/
public static InputStream getResourceAsStream(String resource) {
String path = resolve(resource);
return Objects.requireNonNull(
JnotepadApp.class.getResourceAsStream(resolve(path)),
"Resource not found: " + path
);
}
/**
* Retrieves the resource with the specified path.
*
* @param resource the path of the resource to retrieve
* @return the URI of the retrieved resource
*/
public static URI getResource(String resource) {
String path = resolve(resource);
URL url = Objects.requireNonNull(JnotepadApp.class.getResource(resolve(path)), "Resource not found: " + path);
return URI.create(url.toExternalForm());
}
/**
* Resolves a resource path by checking if it starts with a "/". If it does,
* the resource path is returned as is. If it doesn't, the resource path is
* concatenated with the module directory path.
*
* @param resource the resource path to be resolved
* @param moduleDir the module directory path
* @return the resolved resource path
*/
public static String resolve(String resource, String moduleDir) {
Objects.requireNonNull(resource);
return resource.startsWith("/") ? resource : moduleDir + resource;
}
/**
* Resolve the given resource using the default module directory.
*
* @param resource the resource to resolve
* @return the resolved resource
*/
public static String resolve(String resource) {
return resolve(resource, MODULE_DIR);
}
}