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