ホームページ > Java > &#&チュートリアル > Springbootがjarパッケージにファイルを読み込んだ後にファイルにアクセスできない問題を解決する方法

Springbootがjarパッケージにファイルを読み込んだ後にファイルにアクセスできない問題を解決する方法

WBOY
リリース: 2023-06-03 16:38:18
転載
2655 人が閲覧しました

springboot はファイルを読み取りますが、jar パッケージにパッケージ化した後はファイルにアクセスできません

最新の開発では、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();
    }
   }
  }
 }
ログイン後にコピー

springboot は jar パッケージのバックグラウンドの静的フォルダーにアクセスできません

1.ResourceUtils

通常、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();
ログイン後にコピー

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");
ログイン後にコピー

これにより、jar パッケージの下のアクセスできないパスの問題が完全に解決されます。

以上がSpringbootがjarパッケージにファイルを読み込んだ後にファイルにアクセスできない問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート