Maison > Java > javaDidacticiel > le corps du texte

Comment Springboot lit les fichiers sous les ressources

PHPz
Libérer: 2023-05-12 11:46:15
avant
2726 Les gens l'ont consulté

Plusieurs fois dans le projet, nous devons lire des fichiers de configuration personnalisés. Quelle que soit la façon dont nous écrivons les outils de développement locaux, cela réussit, mais lorsque nous les déployons sur le service, des problèmes surviennent

Exception BOOT-INF/. classes!/config.xml (nom de fichier, répertoire La syntaxe du nom ou du nom de volume est incorrecte.) Il y a des points d'exclamation dans le chemin

Après l'avoir compris, il s'avère que le pot créé par springboot est un fichier, c'est-à-dire. , un package compressé. Il n'y a aucun moyen de lire le chemin dans le fichier compressé, Par conséquent, pour résoudre ce problème et comprendre le principe de lecture du fichier de configuration, il suffit d'obtenir directement le flux du fichier.

Comment Springboot lit les fichiers sous les ressources

1. La lecture utilisant le chemin au sein du projet ne peut être utilisée que dans les outils de développement et ne peut pas être lue après le déploiement. (Pas universel)

Similaire à : src/main/resources/default.xml

File file = new File("src/main/resources/default.xml");

    @Test
    public void testReadFile2() throws IOException {
        File file = new File("src/main/resources/default.xml");
        FileInputStream fis = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader br = new BufferedReader(isr);
        String data = null;
        while((data = br.readLine()) != null) {
            System.out.println(data);
        }
        
        br.close();
        isr.close();
        fis.close();
    }
Copier après la connexion

2. Utilisez org . springframework.util.ResourceUtils, lisez. Impossible de lire dans un environnement Linux. (Pas universel)

File file = ResourceUtils.getFile("classpath:default.xml");
FileInputStream fis = new FileInputStream(file);

    @Test
    public void testReadFile3() throws IOException {
        File file = ResourceUtils.getFile("classpath:default.xml");
        FileInputStream fis = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fis);
        BufferedReader br = new BufferedReader(isr);
        String data = null;
        while((data = br.readLine()) != null) {
            System.out.println(data);
        }
        
        br.close();
        isr.close();
        fis.close();
    }
Copier après la connexion

3. Utilisez org.springframework.core.io. ClassPathResource peut être lu dans divers environnements. (Général)

Resource resource = new ClassPathResource("resource.properties");
InputStream is = resource.getInputStream();

    @Test
    public void testReadFile() throws IOException {
//        ClassPathResource classPathResource = new ClassPathResource("default.xml");
        Resource resource = new ClassPathResource("default.xml");
        InputStream is = resource.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String data = null;
        while((data = br.readLine()) != null) {
            System.out.println(data);
        }
        
        br.close();
        isr.close();
        is.close();
    }
Copier après la connexion

4 Combinez avec les annotations Spring et utilisez org.springframework.core.io. .ResourceLoader ; annotation de classe. (général)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.test.context.junit4.SpringRunner;
 
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
 
    @Autowired
    ResourceLoader resourceLoader;
    
    
    @Test
    public void testReaderFile() throws IOException {
        Resource resource = resourceLoader.getResource("classpath:default.xml");
        InputStream is = resource.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String data = null;
        while((data = br.readLine()) != null) {
            System.out.println(data);
        }
        
        br.close();
        isr.close();
        is.close();
    }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal