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
WBOYavant
2023-06-03 16:38:182650parcourir

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

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");

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

3. ResourceLoader

 public class ResourceRenderer {
 public static InputStream resourceLoader(String fileFullPath) throws IOException {
        ResourceLoader resourceLoader = new DefaultResourceLoader();
        return resourceLoader.getResource(fileFullPath).getInputStream();
    }
}

Usage

InputStream in = ResourceRenderer.resourceLoader("classpath:static/image/image");

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!

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