「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を利用)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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";
}
}
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"; } }
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