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.
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!