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
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.
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(); } } } }
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.
ClassPathResource cpr = new ClassPathResource("static/image/image/kpg"); InputStream in = cpr.getInputStream();
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!