Maison  >  Article  >  Java  >  Comment Springboot lit les fichiers sous les ressources

Comment Springboot lit les fichiers sous les ressources

PHPz
PHPzavant
2023-05-12 11:46:152681parcourir

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();
    }

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();
    }

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();
    }

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();
    }
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer