All Downloads are FREE. Search and download functionalities are using the official Maven repository.

site.sorghum.anno.method.resource.ResourceUtil Maven / Gradle / Ivy

The newest version!
package site.sorghum.anno.method.resource;

import cn.hutool.core.collection.EnumerationIter;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.io.resource.FileResource;
import cn.hutool.core.io.resource.MultiResource;
import cn.hutool.core.io.resource.Resource;
import cn.hutool.core.io.resource.UrlResource;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;

import java.io.File;
import java.io.FileFilter;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.function.Predicate;

/**
 * @author songyinyin
 * @since 2024/1/16 23:08
 */
public class ResourceUtil {

    /**
     * 获取同名的所有资源
* 资源的加载顺序是: *
    *
  • 1. 首先在本项目下查找资源文件
  • *
  • 2. 按照classpath定义的顺序,去对应路径或jar包下寻找资源文件
  • *
* * @param resource 资源名 * @param classLoader {@link ClassLoader},{@code null}表示使用默认的当前上下文ClassLoader * @return {@link MultiResource} */ public static MultiResource getResources(final String resource, final ClassLoader classLoader) { final EnumerationIter iter = cn.hutool.core.io.resource.ResourceUtil.getResourceIter(resource, classLoader); final MultiResource resources = new MultiResource(); for (final URL url : iter) { resources.add(getResource(url)); } return resources; } /** * 获取{@link UrlResource} 资源对象 * * @param url URL * @return {@link Resource} 资源对象 * @since 6.0.0 */ public static Resource getResource(final URL url) { if(URLUtil.isJarURL(url)){ return new JarResource(url); } else if(URLUtil.isFileURL(url)){ return new FileResource(URLUtil.decode(url.getFile())); } return new UrlResource(url); } /** * 获取相对于给定URL的新的URL
* 来自:org.springframework.core.io.UrlResource#createRelativeURL * * @param url 基础URL * @param relativePath 相对路径 * @return 相对于URL的子路径URL * @throws IORuntimeException URL格式错误 * @since 6.0.0 */ public static URL getURL(final URL url, String relativePath) { // # 在文件路径中合法,但是在URL中非法,此处转义 relativePath = StrUtil.replace(StrUtil.removePrefix(relativePath, StrUtil.SLASH), "#", "%23"); try { return new URL(url, relativePath); } catch (final MalformedURLException e) { throw new IORuntimeException(e, "Error occurred when get URL!"); } } /** * 递归遍历目录并处理目录下的文件,可以处理目录或文件: *
    *
  • 目录和非目录均调用{@link Predicate}处理
  • *
  • 目录如果{@link Predicate#test(Object)}为{@code true}则递归调用此方法处理。
  • *
* 此方法与{@link #loopFiles(File, FileFilter)}不同的是,处理目录判断,可减少无效目录的遍历。 * * @param file 文件或目录,文件直接处理 * @param predicate 文件处理器,只会处理文件 * @since 5.5.2 */ public static void walkFiles(final File file, final Predicate predicate) { if (predicate.test(file) && file.isDirectory()) { final File[] subFiles = file.listFiles(); if (ArrayUtil.isNotEmpty(subFiles)) { for (final File tmp : subFiles) { walkFiles(tmp, predicate); } } } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy