クラスパスを使用して、Springプロジェクト内にあるファイルの場所を指定するにはどうすればよいですか?
これは私が現在持っているものです:
FileReader fr = new FileReader("C:\\Users\\Corey\\Desktop\\storedProcedures.sql");
これはデスクトップにハードコードされています。私が欲しいのは、私のプロジェクトにあるファイルへのパスを使用できるようにすることです。
FileReader fr = new FileReader("/src/main/resources/storedProcedures.sql");
助言がありますか?
標準 Java.io.FileReader
?動作しませんが、それなしでは難しくありません。
/src/main/resources
mavenディレクトリの内容はCLASSPATHのルートに配置されるため、次を使用して簡単に取得できます。
InputStream is = getClass().getResourceAsStream("/storedProcedures.sql");
結果がnull
(リソースが見つからない)でない場合は、自由にリーダーでラップしてください。
Reader reader = new InputStreamReader(is);
類似の質問 の@NimChimpskyの回答から:
Resource resource = new ClassPathResource("storedProcedures.sql");
InputStream resourceInputStream = resource.getInputStream();
ClassPathResource およびインターフェイス Resource を使用します。そして、リソースディレクトリを正しく追加していることを確認してください(/src/main/resources/
をクラスパスに追加)。
ResourceにはJava.io.File
を取得するメソッドがあるため、以下も使用できます。
Resource resource = new ClassPathResource("storedProcedures.sql");
FileReader fr = new FileReader(resource.getFile());
Springには、このような状況向けに設計されたorg.springframework.core.io.Resourceがあります。 context.xmlから、クラスパスをBeanに渡すことができます
<bean class="test.Test1">
<property name="path" value="classpath:/test/test1.xml" />
</bean>
そして、あなたはそれをあなたのBeanにリソースとして取得します:
public void setPath(Resource path) throws IOException {
File file = path.getFile();
System.out.println(file);
}
出力
D:\workspace1\spring\target\test-classes\test\test1.xml
これで、新しいFileReader(file)で使用できます
あなたはMavenプロジェクトを持っているように見えるので、リソースは
をやる
getClass().getResource("classpath:storedProcedures.sql")