手动获取 Spring boot 2 中文件的内容

Manually get the contents of a file in Spring boot 2

我在 src/main/resources/static/css/ 下有一个名为 my.css 的文件,我正在尝试将其作为字符串加载,但我终生无法 Spring在类路径中找到这个应该静态加载的文件。

    private String getCss(String cssFileName) {
        try {
            File file = new ClassPathResource("classpath:" + cssFileName + ".css").getFile();
            return new String(Files.readAllBytes(Paths.get(file.getPath())));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "css not found";
    }
}

我尝试了各种网络配置、资源加载器、路径和模式,但就是无法正常工作。如何在资源中查找文件?我期待某种 Resources.getResource("name.type") 类型的东西,它已经有一棵树,其中列出了资源文件夹中的所有资源。

我记得当我需要加载这个 xml/json 文件时遇到了同样的问题。 这是我解决它的方法 -

String sorting;
this.sorting = org.apache.commons.io.IOUtils.toString((getClass().getClassLoader().getResource("order.json")),
                    StandardCharsets.UTF_8.name());

使用@pandaadb 的评论和 Spring 的 auto-wiring 功能来获取 ResourceLoader 的实例 class:

@Controller
public class Controller {

    @Autowired private ResourceLoader loader;

    private String getCss(String cssFileName) {
        try {
            File file = loader.getResource("classpath:/static/css/" + cssFileName + ".css").getFile();
            return new String(Files.readAllBytes(Paths.get(file.getPath())));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "css not found";
    }
}

ResourceLoader 使用您的 src/main/resources 文件夹作为 "classpath:" 搜索的根目录,因此只需添加从该点开始的整个路径即可。不要直接使用 classpathloader,它会根据给定的前缀以某种方式自动转换为一个路径加载器。此代码现在找到文件,读取它并将其转换为字符串。