Java:静的メソッドのgetResourceAsStream
静的メソッドでgetResourceAsStream
を呼び出すには、getClass()
の代わりにClassName.class
を使用します
1. 非静的メソッドで
getClass().getClassLoader().getResourceAsStream("config.properties"))
2. 静的メソッドで
ClassName.class.class.getClassLoader().getResourceAsStream("config.properties"))
1. 非静的メソッド
プロジェクトクラスパス内の.properties
ファイル。
src/main/resources/config.properties
#config file json.filepath = /Users/example/Documents/workspace/SnakeCrawler/data/
FileHelper.java
package com.example; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class FileHelper { public static void main(String[] args) { FileHelper obj = new FileHelper(); System.out.println(obj.getFilePathToSave()); } public String getFilePathToSave() { Properties prop = new Properties(); String result = ""; try (InputStream inputStream = getClass() .getClassLoader().getResourceAsStream("config.properties")) { prop.load(inputStream); result = prop.getProperty("json.filepath"); } catch (IOException e) { e.printStackTrace(); } return result; } }
出力
/Users/example/Documents/workspace/SnakeCrawler/data/
2. 静的メソッド
メソッドgetFilePathToSave()
が静的メソッドに変換されると、getClass()
メソッドは失敗し、Cannot make a static reference to the non-static method getClass() from the type Objectにプロンプトが表示されます。
To fix this、getClass()
をClassName.class
に更新
FileHelper.java
package com.example; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class FileHelper { public static void main(String[] args) { System.out.println(getFilePathToSaveStatic()); } public static String getFilePathToSaveStatic() { Properties prop = new Properties(); String result = ""; try (InputStream inputStream = FileHelper.class .getClassLoader().getResourceAsStream("config.properties")) { prop.load(inputStream); result = prop.getProperty("json.filepath"); } catch (IOException e) { e.printStackTrace(); } return result; } }
出力
/Users/example/Documents/workspace/SnakeCrawler/data/