Heim  >  Artikel  >  Java  >  Wie Springboot Dateien unter Ressourcen liest

Wie Springboot Dateien unter Ressourcen liest

PHPz
PHPznach vorne
2023-05-12 11:46:152732Durchsuche

Oft müssen wir im Projekt benutzerdefinierte Konfigurationsdateien lesen, egal wie wir die lokalen Entwicklungstools schreiben, aber wenn wir sie für den Dienst bereitstellen, wird es Probleme geben

Ausnahme BOOT-INF/classes!/config.xml (Dateiname, Verzeichnis Die Syntax des Namens oder der Datenträgerbezeichnung ist falsch.) Der Pfad enthält Ausrufezeichen

Nachdem ich es verstanden habe, stellt sich heraus, dass es sich bei dem von Springboot erstellten JAR um ein handelt Datei, also ein komprimiertes Paket. Es gibt keine Möglichkeit, den Pfad in der komprimierten Datei zu lesen. Um dieses Problem zu lösen und das Prinzip des Lesens der Konfigurationsdatei zu verstehen, rufen Sie einfach den Dateistream direkt ab.

Wie Springboot Dateien unter Ressourcen liest

1. Das Lesen über den Pfad innerhalb des Projekts kann nur in Entwicklungstools verwendet werden und kann nach der Bereitstellung nicht gelesen werden. (Nicht universell)

Ähnlich wie: 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. Verwenden Sie org .springframework.util.ResourceUtils, lesen. In der Linux-Umgebung kann nicht gelesen werden. (Nicht universell)

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. Verwenden Sie org.springframework.core.io. ClassPathResource kann in verschiedenen Umgebungen gelesen werden. (Allgemein)

Resource resources = new ClassPathResource("resource.properties");
InputStream is = resources.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. Kombinieren Sie es mit Spring-Annotationen und verwenden Sie org.springframework.core.io . ResourceLoader; Klassenanmerkung. (allgemein)

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

Das obige ist der detaillierte Inhalt vonWie Springboot Dateien unter Ressourcen liest. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen