1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

jarで実行するSpringBoot(Java)アプリケーションで、resources配下のExcelファイルを扱う方法

Last updated at Posted at 2022-11-30

 jarに圧縮してデプロイするタイプのSpringBootアプリケーションで、resourcesフォルダ内のExcelファイルを使用したい

 以下のようにPathクラスを使用しても、jarに圧縮するアプリケーションでは取得できず、NoSuchFileExceptionが吐かれます。

Pathクラスで取得するソース.java
    // resourceフォルダ内に存在するファイルのパスを変数:pathに代入 <--NoSuchFileExceptionがスローされる
    Path path = Paths.get("example/src/main/resources/Excel.xlsx");

    // パスのファイルを操作(Excelを操作するWorkbookクラスを使用)
    Workbook wb = WorkbookFactory.create(new File(path.toString()));

 なぜ例外が発生するのか?

 Javaプロジェクト内に存在するresourceフォルダ内のリソースファイルは、jar化するとBOOT-INFフォルダ内に格納されるため、アプリケーションはそのパスを辿ってリソースファイルを取得します。
 そのため、src/main/resources~という風にパスを指定しても.jar内にはそのパスは存在しないため例外発生となります。(.jarの拡張子を.zipに変更すると何がjar内に圧縮されているのか見ることができます)

 BOOT-INF内に入っているファイルを取得する方法は何個かありそうですが、私は以下の方法を採用しました。


 解決方法:URLクラスとInputStreamクラスを使用する

 実際のソースコード

URLクラスとInputStreamクラスで取得するソース.java
    // ファイルURLからリソースファイルの情報を取得
    URL url = resourceLoader.getResource("classpath:" + "Excel.xlsx").getURL();

    // URLクラスのインスタンスでストリームを作成する
    InputStream fileStream = url.openStream();

    // ストリームを使用してWorkbookクラスのインスタンスを作成
    Workbook wb = WorkbookFactory.create(fileStream);

 以上の方法で、jarに圧縮したSpringBoot(Java)アプリケーション内でもExcelシートやその他の拡張子を持つファイルを扱えます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?