web-dev-qa-db-ja.com

Spring Bootでsrc / main / resources /フォルダーのリソースファイルにアクセスする方法

Src/main/resources/XYZ/viewフォルダーのxsdにアクセスしようとしていますが、XYZ/viewフォルダーは私が作成し、フォルダーにはabc.xsdがあり、xml検証に必要です。

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を取得します。

ファイルfile = new File(new ClassPathResource( "/ src/main/resources/XYZ/view/abc.xsd")。getPath());スキーマschema = factory.newSchema(file);

それが機能しているので、なぜ他の2つのトレイルが間違っているのか、なぜ私にとってはうまくいかず、他の人にとってはうまくいかなかったのかを知りたいです。 :(

それとも私が行方不明にしている他の良い方法がありますか

5
tyro

_@Value_アノテーション は、プロパティ値を変数(通常は文字列または単純なプリミティブ値)に注入するために使用されます。より多くの情報を見つけることができます こちら

リソースファイルをロードする場合は、 ResourceLoader のように使用します。

_@Autowired
private ResourceLoader resourceLoader;

...

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

次に、次の方法でリソースにアクセスできます。

fileResource.getInputStream()またはfileResource.getFile()

14
Kevin Peters

@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);

        }
    }
}

完全に機能するコード例は、私の Spring Bootでリソースをロードする チュートリアルで入手できます。

3
Jan Bodnar