如何在Spring Boot中访问src / main / resources /文件夹中的资源文件

时间:2017-05-05 11:52:01

标签: java spring-boot jaxb

我正在尝试访问src / main / resources / XYZ / view文件夹中的xsd,其中我创建了XYZ / view文件夹,文件夹中包含了我需要进行xml验证的abc.xsd。

每当我将结果作为null时尝试访问xsd时,

我试过,

1)

@Value(value = "classpath:XYZ/view/abc.xsd")
private static Resource dataStructureXSD;
InputStream is = dataStructureXSD.getInputStream();
Source schemaSource = new StreamSource(is);
Schema schema = factory.newSchema(schemaSource);

2)

Resource resource = new ClassPathResource("abc.xsd");
File file = resource.getFile();

以及我为获取资源或类加载器等而创建的更多路径。

最后我得到了xsd,

文件文件=新文件(新的ClassPathResource(“/ src / main / resources / XYZ / view / abc.xsd”)。getPath()); Schema schema = factory.newSchema(file);

它正在发挥作用,我想知道为什么其他两条路会出错或为什么它对我不起作用而对别人好。 :(

还是有其他好方法可以做到我缺少

4 个答案:

答案 0 :(得分:12)

@Value annotation用于将属性值注入变量,通常是字符串或简单的原始值。您可以找到更多信息here

如果要加载资源文件,请使用ResourceLoader之类的:

@Autowired
private ResourceLoader resourceLoader;

...

final Resource fileResource = resourceLoader.getResource("classpath:XYZ/view/abc.xsd");

然后您可以使用以下方式访问资源:

fileResource.getInputStream()fileResource.getFile()

答案 1 :(得分:3)

@ValueResourceLoader对我来说都很合适。我在src/main/resources/中有一个简单的文本文件,我可以用两种方法阅读它。

也许static关键字是罪魁祸首?

package com.zetcode;

import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Component;

@Component
public class MyRunner implements CommandLineRunner {

    @Value("classpath:thermopylae.txt")
    private Resource res;

    //@Autowired
    //private ResourceLoader resourceLoader;

    @Override
    public void run(String... args) throws Exception {

       // Resource fileResource = resourceLoader.getResource("classpath:thermopylae.txt");        

        List<String> lines = Files.readAllLines(Paths.get(res.getURI()),
                StandardCharsets.UTF_8);

        for (String line : lines) {

            System.out.println(line);

        }
    }
}

我的Loading resouces in Spring Boot教程中提供了完整的工作代码示例。

答案 2 :(得分:0)

您可以使用波纹管,例如..

  1. 我的资源文件位置就像下面的

enter image description here

我在弹簧靴中使用了波纹管

@Autowired
private ResourceLoader resourceLoader;

  try {     

   final Resource resource = resourceLoader.getResource("classpath:files/timezoneJson.json");
         Reader reader = new InputStreamReader(resource.getInputStream());
         String filedata =  FileCopyUtils.copyToString(reader);
    } catch (Exception e) {     
        e.printStackTrace();
    }

答案 3 :(得分:0)

从资源加载文件,

@Autowired 私有 ResourceLoader 资源加载器; ...

Resource fileResource = resourceLoader.getResource(config.getFilePath()); 尝试 (BufferedReader in = new BufferedReader(new FileReader(fileResource.getFile()))){ ... }

在 applicaiton.yml 中

filePath: "classpath:StaticData/Test.csv"