Maison > Java > javaDidacticiel > Comment résoudre le problème selon lequel Springboot ne peut pas accéder au fichier après l'avoir lu dans un package jar

Comment résoudre le problème selon lequel Springboot ne peut pas accéder au fichier après l'avoir lu dans un package jar

WBOY
Libérer: 2023-06-03 16:38:18
avant
2653 Les gens l'ont consulté

Springboot lit le fichier, mais ne peut pas y accéder après l'avoir empaqueté dans un package jar.

Dans le dernier développement, il existe une situation où Springboot ne peut pas lire le fichier après l'avoir empaqueté dans un package jar. le chemin virtuel du fichier n'est pas valide et n'est accessible qu'en lecture via le flux.

Le fichier est sous resources

public void test() {
  List<String> names = new ArrayList<>();
  InputStreamReader read = null;
  try {
   ClassPathResource resource = new ClassPathResource("name.txt");
 
   InputStream inputStream = resource.getInputStream();
   read = new InputStreamReader(inputStream, "utf-8");
   BufferedReader bufferedReader = new BufferedReader(read);
   String txt = null;
   while ((txt = bufferedReader.readLine()) != null) {
    if (StringUtils.isNotBlank(txt)) {
     names.add(txt);
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (read != null) {
    try {
     read.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 }
Copier après la connexion

Le dossier statique n'est pas accessible en arrière-plan du package jar springboot

1 ResourceUtils

Habituellement, lorsque nous écrivons des projets Spring Boot, nous utilisons occasionnellement des fichiers sous le chemin de classe en arrière-plan. , nous sommes comme ça Écrit par

File file = ResourceUtils.getFile("classpath:static/image/image");
Copier après la connexion

Dans ce cas, il n'y aurait eu aucun problème. Mais après avoir exécuté le package jar, le fichier ne sera pas trouvé.

Le fichier sous Resource existe dans le fichier jar. Il n'y a pas de véritable chemin sur le disque. Il s'agit en fait d'un chemin à l'intérieur du fichier jar. Par conséquent, le fichier ne peut pas être obtenu correctement via la méthode ResourceUtils.getFile ou this.getClass().getResource("").

Pour cette situation. Parfois, les documents du projet sont placés en dehors du projet, mais il est facile de les supprimer par erreur.

2.ClassPathResource

 ClassPathResource cpr = new ClassPathResource("static/image/image/kpg");
 InputStream in = cpr.getInputStream();
Copier après la connexion

3. ResourceLoader

 public class ResourceRenderer {
 public static InputStream resourceLoader(String fileFullPath) throws IOException {
        ResourceLoader resourceLoader = new DefaultResourceLoader();
        return resourceLoader.getResource(fileFullPath).getInputStream();
    }
}
Copier après la connexion

Usage

InputStream in = ResourceRenderer.resourceLoader("classpath:static/image/image");
Copier après la connexion

Cela résout parfaitement le problème des chemins inaccessibles sous le package jar.

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