最新の開発では、jar パッケージにパッケージ化した後、springboot がファイルを読み取れない状況が発生しています。それは、パッケージ化後、ファイルの仮想パスが無効になり、ストリーム経由でのみ読み取ることができるということです。
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(); } } } }
通常、Spring Boot を作成するときはプロジェクト クラスパス以下のファイルをバックグラウンドで使用する場合がありますが、通常は
File file = ResourceUtils.getFile("classpath:static/image/image");
のように記述しますが、この場合は問題ありません。しかし、jar パッケージを実行した後、ファイルは見つかりません。
Resource の下にあるファイルは、jar ファイル内に存在します。ディスク上に実際のパスはありません。実際には、jar 内のパスです。そのため、ResourceUtils.getFile または this.getClass().getResource("") メソッドを通じてファイルを正しく取得できません。 ######この場合。プロジェクト ドキュメントがプロジェクトの外部に配置される場合がありますが、これらのドキュメントは誤って削除しやすくなります。
2.ClassPathResource
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(); } }
InputStream in = ResourceRenderer.resourceLoader("classpath:static/image/image");
これにより、jar パッケージの下のアクセスできないパスの問題が完全に解決されます。
以上がSpringbootがjarパッケージにファイルを読み込んだ後にファイルにアクセスできない問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。