「Spring Boot 2.6」ClassPathResourceを使ってファイルを読むサンプル

環境
Windows10 64bit
Spring Boot 2.6.2
Spring Tool Suite 4
JDK 11

関数
1.public static List<String> readAllLines(Path path) throws IOException
ファイルからすべての行を読み取ります。ファイルから取得したバイトは、UTF-8文字セットを使用して文字にデコードされます。
戻り値:
ファイルから1つのListとして読み取られた行。そのListが変更可能であるかどうかは実装に依存しているため、特定できない

2.ClassPathResourceの定義
public class ClassPathResource
extends AbstractFileResolvingResource
クラスパスリソースの Resource 実装。リソースのロードに、指定された ClassLoaderSE または指定された ClassSE のいずれかを使用します。
クラスパスリソースがファイルシステムにある場合は java.io.File として解決をサポートしますが、JAR 内のリソースはサポートしません。

使用例
1.対象ファイル
src\main\resources\user.properties
以下の内容が含まれます
username=test07
addr=tokyo
year=2022

2.コントローラのソースコード(ClassPathResourceを利用)

package com.example.demo;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.List;

import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class FileController {

      private static final String FILEPATH = "/user.properties";

      @GetMapping("/testfile")
      public String funA() throws IOException {
            File res = null;
            try {
                  res = new ClassPathResource(FILEPATH).getFile();
            } catch (IOException e1) {
                  e1.printStackTrace();
            }

            List<String> line;
            try {
                  // ファイルの各行を読み込み
                  line = Files.readAllLines(res.toPath());
                  System.out.println("すべての行の内容" + line);
                  for (String ss : line) {
                        System.out.println(ss);
                  }
            } catch (IOException e) {
                  e.printStackTrace();
            }
            return "arkgame";
      }
}

3.動作確認
ブラウザ画面に「http://127.0.0.1:8080/testfile」を入力すると
コンソール画面に以下の内容が表示されます
すべての行の内容[username=test07, addr=tokyo, year=2022]
username=test07
addr=tokyo
year=2022

Spring Boot

Posted by arkgame